summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/User.c
diff options
context:
space:
mode:
authorAnand Kumar <kumaranand@vmware.com>2019-01-10 16:45:24 -0800
committerAlin Gabriel Serdean <aserdean@ovn.org>2019-01-28 15:37:59 +0200
commitc8915346be1fab8640f517277d5dc278582cff21 (patch)
tree07f873066be63b7d1c04800f44f0e0e05ebb5b89 /datapath-windows/ovsext/User.c
parent9da3207af770bd124dc2d8aea2249d593353feaa (diff)
downloadopenvswitch-c8915346be1fab8640f517277d5dc278582cff21.tar.gz
datapath-windows: Add support for 'OVS_KEY_ATTR_ENCAP' key attribute.
Add a new structure in l2 header to accomodate vlan header, based of commit "d7efce7beff25052bd9083419200e1a47f0d6066 datapath: 802.1AD Flow handling, actions, vlan parsing, netlink attributes" Also reset vlan header in flow key, after deleting vlan tag from nbl With this change a sample vlan flow would look like, eth(src=0a:ea:8a:24:03:86,dst=0a:cd:fa:4d:15:5c),in_port(3),eth_type(0x8100), vlan(vid=2239,pcp=0),encap(eth_type(0x0800),ipv4(src=13.12.11.149,dst=13.12.11.107, proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)) Signed-off-by: Anand Kumar <kumaranand@vmware.com> Acked-by: Alin Gabriel Serdean <aserdean@ovn.org> Signed-off-by: Alin Gabriel Serdean <aserdean@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/User.c')
-rw-r--r--datapath-windows/ovsext/User.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c
index 509472f23..b43d7cc04 100644
--- a/datapath-windows/ovsext/User.c
+++ b/datapath-windows/ovsext/User.c
@@ -321,6 +321,25 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
goto done;
}
+ if (keyAttrs[OVS_KEY_ATTR_ENCAP]) {
+ UINT32 encapOffset = 0;
+ PNL_ATTR encapAttrs[__OVS_KEY_ATTR_MAX];
+ encapOffset = (UINT32)((PCHAR)(keyAttrs[OVS_KEY_ATTR_ENCAP])
+ - (PCHAR)nlMsgHdr);
+
+ if ((NlAttrParseNested(nlMsgHdr, encapOffset,
+ NlAttrLen(keyAttrs[OVS_KEY_ATTR_ENCAP]),
+ nlFlowKeyPolicy,
+ nlFlowKeyPolicyLen,
+ encapAttrs, ARRAY_SIZE(encapAttrs)))
+ != TRUE) {
+ OVS_LOG_ERROR("Encap Key Attr Parsing failed for msg: %p",
+ nlMsgHdr);
+ status = STATUS_UNSUCCESSFUL;
+ goto done;
+ }
+ }
+
execute.dpNo = ovsHdr->dp_ifindex;
_MapNlAttrToOvsPktExec(nlMsgHdr, nlAttrs, keyAttrs, &execute);