[ovs-dev] [PATCH v2 2/6] datapath-windows: validate ETHERTYPE and ETHERNET attribute.
Ankur Sharma
ankursharma at vmware.com
Sat Oct 11 22:07:37 UTC 2014
During vswitchd boot up kernel is receiving FLOW_ADD commands
without ETHERTYPE attribute. Added additional check for the same
in this patch. During the same phase kernel is also receiving
packet_execute with no ETHERNET attribute.
Signed-off-by: Ankur Sharma <ankursharma at vmware.com>
Acked-by: Nithin Raju <nithin at vmware.com>
---
datapath-windows/ovsext/Flow.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c
index 61a1eda..cfff3fe 100644
--- a/datapath-windows/ovsext/Flow.c
+++ b/datapath-windows/ovsext/Flow.c
@@ -123,7 +123,7 @@ static const NL_POLICY nlFlowKeyPolicy[] = {
[OVS_KEY_ATTR_ETHERNET] = {.type = NL_A_UNSPEC,
.minLen = sizeof(struct ovs_key_ethernet),
.maxLen = sizeof(struct ovs_key_ethernet),
- .optional = FALSE},
+ .optional = TRUE},
[OVS_KEY_ATTR_VLAN] = {.type = NL_A_UNSPEC, .minLen = 2,
.maxLen = 2, .optional = TRUE},
[OVS_KEY_ATTR_ETHERTYPE] = {.type = NL_A_UNSPEC, .minLen = 2,
@@ -1232,18 +1232,26 @@ _MapKeyAttrToFlowPut(PNL_ATTR *keyAttrs,
PNL_ATTR *tunnelAttrs,
OvsFlowKey *destKey)
{
- const struct ovs_key_ethernet *eth_key;
-
_MapTunAttrToFlowPut(keyAttrs, tunnelAttrs, destKey);
/* ===== L2 headers ===== */
destKey->l2.inPort = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_IN_PORT]);
- eth_key = NlAttrGet(keyAttrs[OVS_KEY_ATTR_ETHERNET]);
- RtlCopyMemory(destKey->l2.dlSrc, eth_key->eth_src, ETH_ADDR_LEN);
- RtlCopyMemory(destKey->l2.dlDst, eth_key->eth_dst, ETH_ADDR_LEN);
+ if (keyAttrs[OVS_KEY_ATTR_ETHERNET]) {
+ const struct ovs_key_ethernet *eth_key;
+ eth_key = NlAttrGet(keyAttrs[OVS_KEY_ATTR_ETHERNET]);
+ RtlCopyMemory(destKey->l2.dlSrc, eth_key->eth_src, ETH_ADDR_LEN);
+ RtlCopyMemory(destKey->l2.dlDst, eth_key->eth_dst, ETH_ADDR_LEN);
+ }
+
+ /* TODO: Ideally ETHERTYPE should not be optional.
+ * But during vswitchd bootup we are seeing FLOW_ADD
+ * requests with no ETHERTYPE attributes.
+ * Need to verify this. */
+ if (keyAttrs[OVS_KEY_ATTR_ETHERTYPE]) {
destKey->l2.dlType = ntohs((NlAttrGetU16(keyAttrs
- [OVS_KEY_ATTR_ETHERTYPE])));
+ [OVS_KEY_ATTR_ETHERTYPE])));
+ }
if (keyAttrs[OVS_KEY_ATTR_VLAN]) {
destKey->l2.vlanTci = NlAttrGetU16(keyAttrs
--
1.9.1
More information about the dev
mailing list