diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/openvswitch/Kconfig | 4 | ||||
| -rw-r--r-- | net/openvswitch/conntrack.c | 16 |
2 files changed, 11 insertions, 9 deletions
diff --git a/net/openvswitch/Kconfig b/net/openvswitch/Kconfig index 234a73344c6e..ce947292ae77 100644 --- a/net/openvswitch/Kconfig +++ b/net/openvswitch/Kconfig | |||
| @@ -7,7 +7,9 @@ config OPENVSWITCH | |||
| 7 | depends on INET | 7 | depends on INET |
| 8 | depends on !NF_CONNTRACK || \ | 8 | depends on !NF_CONNTRACK || \ |
| 9 | (NF_CONNTRACK && ((!NF_DEFRAG_IPV6 || NF_DEFRAG_IPV6) && \ | 9 | (NF_CONNTRACK && ((!NF_DEFRAG_IPV6 || NF_DEFRAG_IPV6) && \ |
| 10 | (!NF_NAT || NF_NAT))) | 10 | (!NF_NAT || NF_NAT) && \ |
| 11 | (!NF_NAT_IPV4 || NF_NAT_IPV4) && \ | ||
| 12 | (!NF_NAT_IPV6 || NF_NAT_IPV6))) | ||
| 11 | select LIBCRC32C | 13 | select LIBCRC32C |
| 12 | select MPLS | 14 | select MPLS |
| 13 | select NET_MPLS_GSO | 15 | select NET_MPLS_GSO |
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c index 47f7c62761d2..3797879b0bf8 100644 --- a/net/openvswitch/conntrack.c +++ b/net/openvswitch/conntrack.c | |||
| @@ -535,14 +535,15 @@ static int ovs_ct_nat_execute(struct sk_buff *skb, struct nf_conn *ct, | |||
| 535 | switch (ctinfo) { | 535 | switch (ctinfo) { |
| 536 | case IP_CT_RELATED: | 536 | case IP_CT_RELATED: |
| 537 | case IP_CT_RELATED_REPLY: | 537 | case IP_CT_RELATED_REPLY: |
| 538 | if (skb->protocol == htons(ETH_P_IP) && | 538 | if (IS_ENABLED(CONFIG_NF_NAT_IPV4) && |
| 539 | skb->protocol == htons(ETH_P_IP) && | ||
| 539 | ip_hdr(skb)->protocol == IPPROTO_ICMP) { | 540 | ip_hdr(skb)->protocol == IPPROTO_ICMP) { |
| 540 | if (!nf_nat_icmp_reply_translation(skb, ct, ctinfo, | 541 | if (!nf_nat_icmp_reply_translation(skb, ct, ctinfo, |
| 541 | hooknum)) | 542 | hooknum)) |
| 542 | err = NF_DROP; | 543 | err = NF_DROP; |
| 543 | goto push; | 544 | goto push; |
| 544 | #if IS_ENABLED(CONFIG_NF_NAT_IPV6) | 545 | } else if (IS_ENABLED(CONFIG_NF_NAT_IPV6) && |
| 545 | } else if (skb->protocol == htons(ETH_P_IPV6)) { | 546 | skb->protocol == htons(ETH_P_IPV6)) { |
| 546 | __be16 frag_off; | 547 | __be16 frag_off; |
| 547 | u8 nexthdr = ipv6_hdr(skb)->nexthdr; | 548 | u8 nexthdr = ipv6_hdr(skb)->nexthdr; |
| 548 | int hdrlen = ipv6_skip_exthdr(skb, | 549 | int hdrlen = ipv6_skip_exthdr(skb, |
| @@ -557,7 +558,6 @@ static int ovs_ct_nat_execute(struct sk_buff *skb, struct nf_conn *ct, | |||
| 557 | err = NF_DROP; | 558 | err = NF_DROP; |
| 558 | goto push; | 559 | goto push; |
| 559 | } | 560 | } |
| 560 | #endif | ||
| 561 | } | 561 | } |
| 562 | /* Non-ICMP, fall thru to initialize if needed. */ | 562 | /* Non-ICMP, fall thru to initialize if needed. */ |
| 563 | case IP_CT_NEW: | 563 | case IP_CT_NEW: |
| @@ -1239,7 +1239,8 @@ static bool ovs_ct_nat_to_attr(const struct ovs_conntrack_info *info, | |||
| 1239 | } | 1239 | } |
| 1240 | 1240 | ||
| 1241 | if (info->range.flags & NF_NAT_RANGE_MAP_IPS) { | 1241 | if (info->range.flags & NF_NAT_RANGE_MAP_IPS) { |
| 1242 | if (info->family == NFPROTO_IPV4) { | 1242 | if (IS_ENABLED(CONFIG_NF_NAT_IPV4) && |
| 1243 | info->family == NFPROTO_IPV4) { | ||
| 1243 | if (nla_put_in_addr(skb, OVS_NAT_ATTR_IP_MIN, | 1244 | if (nla_put_in_addr(skb, OVS_NAT_ATTR_IP_MIN, |
| 1244 | info->range.min_addr.ip) || | 1245 | info->range.min_addr.ip) || |
| 1245 | (info->range.max_addr.ip | 1246 | (info->range.max_addr.ip |
| @@ -1247,8 +1248,8 @@ static bool ovs_ct_nat_to_attr(const struct ovs_conntrack_info *info, | |||
| 1247 | (nla_put_in_addr(skb, OVS_NAT_ATTR_IP_MAX, | 1248 | (nla_put_in_addr(skb, OVS_NAT_ATTR_IP_MAX, |
| 1248 | info->range.max_addr.ip)))) | 1249 | info->range.max_addr.ip)))) |
| 1249 | return false; | 1250 | return false; |
| 1250 | #if IS_ENABLED(CONFIG_NF_NAT_IPV6) | 1251 | } else if (IS_ENABLED(CONFIG_NF_NAT_IPV6) && |
| 1251 | } else if (info->family == NFPROTO_IPV6) { | 1252 | info->family == NFPROTO_IPV6) { |
| 1252 | if (nla_put_in6_addr(skb, OVS_NAT_ATTR_IP_MIN, | 1253 | if (nla_put_in6_addr(skb, OVS_NAT_ATTR_IP_MIN, |
| 1253 | &info->range.min_addr.in6) || | 1254 | &info->range.min_addr.in6) || |
| 1254 | (memcmp(&info->range.max_addr.in6, | 1255 | (memcmp(&info->range.max_addr.in6, |
| @@ -1257,7 +1258,6 @@ static bool ovs_ct_nat_to_attr(const struct ovs_conntrack_info *info, | |||
| 1257 | (nla_put_in6_addr(skb, OVS_NAT_ATTR_IP_MAX, | 1258 | (nla_put_in6_addr(skb, OVS_NAT_ATTR_IP_MAX, |
| 1258 | &info->range.max_addr.in6)))) | 1259 | &info->range.max_addr.in6)))) |
| 1259 | return false; | 1260 | return false; |
| 1260 | #endif | ||
| 1261 | } else { | 1261 | } else { |
| 1262 | return false; | 1262 | return false; |
| 1263 | } | 1263 | } |
