diff options
author | Anand Kumar <kumaranand@vmware.com> | 2019-01-10 16:45:24 -0800 |
---|---|---|
committer | Alin Gabriel Serdean <aserdean@ovn.org> | 2019-01-28 15:37:59 +0200 |
commit | c8915346be1fab8640f517277d5dc278582cff21 (patch) | |
tree | 07f873066be63b7d1c04800f44f0e0e05ebb5b89 /datapath-windows/ovsext/User.c | |
parent | 9da3207af770bd124dc2d8aea2249d593353feaa (diff) | |
download | openvswitch-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.c | 19 |
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); |