diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-06-10 09:37:01 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-06-12 11:25:53 +0900 |
commit | 411e22dcfd2646b952a60a8e2145e2db78ccc3bf (patch) | |
tree | d7814cffd36327f1a421c010fb0461977a0dbcbf | |
parent | b7d38440f80ccddb772cd134ff48adee5273b399 (diff) |
nxm: add NXM_OF_IP_PROTO support
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Tested-by: Simon Horman <horms@verge.net.au>
-rw-r--r-- | ryu/ofproto/nx_match.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/ryu/ofproto/nx_match.py b/ryu/ofproto/nx_match.py index 14b74285..9ccad8e4 100644 --- a/ryu/ofproto/nx_match.py +++ b/ryu/ofproto/nx_match.py @@ -34,6 +34,7 @@ FWW_IN_PORT = 1 << 0 FWW_DL_SRC = 1 << 2 FWW_DL_DST = 1 << 3 FWW_DL_TYPE = 1 << 4 +FWW_NW_PROTO = 1 << 5 # No corresponding OFPFW_* bits FWW_ETH_MCAST = 1 << 1 FWW_NW_DSCP = 1 << 6 @@ -68,6 +69,7 @@ class Flow(object): self.nw_tos = 0 self.vlan_tci = 0 self.nw_ttl = 0 + self.nw_proto = 0 class FlowWildcards(object): @@ -150,6 +152,10 @@ class ClsRule(object): self.wc.vlan_tci_mask = mask self.flow.vlan_tci = tci + def set_nw_proto(self, nw_proto): + self.wc.wildcards &= ~FWW_NW_PROTO + self.flow.nw_proto = nw_proto + def set_nw_dscp(self, nw_dscp): self.wc.wildcards &= ~FWW_NW_DSCP self.flow.nw_tos &= ~IP_DSCP_MASK @@ -376,6 +382,17 @@ class MFIPTTL(MFField): return self._put(buf, offset, rule.flow.nw_ttl) +@_register_make +@_set_nxm_headers([ofproto_v1_0.NXM_OF_IP_PROTO]) +class MFIPProto(MFField): + @classmethod + def make(cls): + return cls(MF_PACK_STRING_8) + + def put(self, buf, offset, rule): + return self._put(buf, offset, rule.flow.nw_proto) + + def serialize_nxm_match(rule, buf, offset): old_offset = offset @@ -404,6 +421,8 @@ def serialize_nxm_match(rule, buf, offset): offset += nxm_put(buf, offset, ofproto_v1_0.NXM_NX_IP_ECN, rule) if not rule.wc.wildcards & FWW_NW_TTL: offset += nxm_put(buf, offset, ofproto_v1_0.NXM_NX_IP_TTL, rule) + if not rule.wc.wildcards & FWW_NW_PROTO: + offset += nxm_put(buf, offset, ofproto_v1_0.NXM_OF_IP_PROTO, rule) # XXX: IP Source and Destination # XXX: IPv6 # XXX: ARP |