diff options
Diffstat (limited to 'data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp')
-rw-r--r-- | data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp index b81856a..4451906 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp @@ -665,6 +665,9 @@ static int IPACM_firewall_xml_parse_tree memcpy(content_buf, (void *)content, str_size); config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.tos = atoi(content_buf); + // Here we do not know if it is TOS with mask or not, so we put at both places + config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.tos_value + = atoi(content_buf); IPACMDBG_H("\n IPV4 TOS val is %d \n", config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.tos); } @@ -674,13 +677,25 @@ static int IPACM_firewall_xml_parse_tree content = IPACM_read_content_element(xml_node); if (content) { + uint8_t mask; + str_size = strlen(content); memset(content_buf, 0, sizeof(content_buf)); memcpy(content_buf, (void *)content, str_size); - config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.tos - &= atoi(content_buf); - IPACMDBG_H("\n IPv4 TOS mask is %d \n", - config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.tos); + mask = atoi(content_buf); + IPACMDBG_H("\n IPv4 TOS mask is %u \n", mask); + if (mask != 0xFF) { + // TOS attribute cannot be used + config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.tos = 0; + config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.tos_mask = mask; + + config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.attrib_mask |= + IPA_FLT_TOS_MASKED; + config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.attrib_mask &= + ~IPA_FLT_TOS; + } else { + config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.tos_value = 0; + } } } else if (0 == IPACM_util_icmp_string((char*)xml_node->name, IPV4NextHeaderProtocol_TAG)) |