summaryrefslogtreecommitdiff
path: root/datapath-windows
diff options
context:
space:
mode:
authorldejing <ldejing@vmware.com>2022-06-24 19:09:08 +0800
committerAlin-Gabriel Serdean <alin.serdean@canonical.com>2022-09-20 13:08:51 +0300
commit7eee450f8da2ceeaa407e8b4b85aedc56164bc7e (patch)
treedc35ffcf34551394bdb037e67adaeede97c32124 /datapath-windows
parentb26015c33fe420399fff1c9f35d1e3204c441954 (diff)
downloadopenvswitch-7eee450f8da2ceeaa407e8b4b85aedc56164bc7e.tar.gz
datapath-windows: Fix icmp related error code.
When icmp error code send back to sender, currently ovs ct can't create conntrack for the error code properly, this patch mainly fix the bug. icmp error code test case: 1) packet too big. 2) network unreachable 3) parameter problem Signed-off-by: ldejing <ldejing@vmware.com> Signed-off-by: Alin-Gabriel Serdean <aserdean@ovn.org>
Diffstat (limited to 'datapath-windows')
-rw-r--r--datapath-windows/ovsext/Conntrack-icmp.c6
-rw-r--r--datapath-windows/ovsext/Conntrack.c4
2 files changed, 7 insertions, 3 deletions
diff --git a/datapath-windows/ovsext/Conntrack-icmp.c b/datapath-windows/ovsext/Conntrack-icmp.c
index 9221f8518..081eb73d9 100644
--- a/datapath-windows/ovsext/Conntrack-icmp.c
+++ b/datapath-windows/ovsext/Conntrack-icmp.c
@@ -78,7 +78,11 @@ OvsConntrackValidateIcmp6Packet(const ICMPHdr *icmp)
return FALSE;
}
- return icmp->type == ICMP6_ECHO_REQUEST;
+ return icmp->type == ICMP6_ECHO_REQUEST ||
+ icmp->type == ICMP6_PACKET_TOO_BIG ||
+ icmp->type == ICMP6_DST_UNREACH ||
+ icmp->type == ICMP6_TIME_EXCEEDED ||
+ icmp->type == ICMP6_PARAM_PROB;
}
OVS_CT_ENTRY *
diff --git a/datapath-windows/ovsext/Conntrack.c b/datapath-windows/ovsext/Conntrack.c
index fe9fb74ca..39ba5cc10 100644
--- a/datapath-windows/ovsext/Conntrack.c
+++ b/datapath-windows/ovsext/Conntrack.c
@@ -357,8 +357,8 @@ OvsCtEntryCreate(OvsForwardingContext *fwdCtx,
const ICMPHdr *icmp;
icmp = OvsGetIcmp(curNbl, layers->l4Offset, &storage);
if (!OvsConntrackValidateIcmp6Packet(icmp)) {
- if(icmp) {
- OVS_LOG_TRACE("Invalid ICMP packet detected, icmp->type %u",
+ if (icmp) {
+ OVS_LOG_TRACE("Invalid ICMP6 packet detected, icmp->type %u",
icmp->type);
}
state = OVS_CS_F_INVALID;