aboutsummaryrefslogtreecommitdiff
path: root/lib/nx-match.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nx-match.c')
-rw-r--r--lib/nx-match.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/nx-match.c b/lib/nx-match.c
index cb73084d..9919e1f1 100644
--- a/lib/nx-match.c
+++ b/lib/nx-match.c
@@ -460,7 +460,7 @@ nx_put_match(struct ofpbuf *b, const struct cls_rule *cr)
int match_len;
int i;
- BUILD_ASSERT_DECL(FLOW_WC_SEQ == 5);
+ BUILD_ASSERT_DECL(FLOW_WC_SEQ == 6);
/* Metadata. */
if (!(wc & FWW_IN_PORT)) {
@@ -496,6 +496,10 @@ nx_put_match(struct ofpbuf *b, const struct cls_rule *cr)
nxm_put_8(b, NXM_NX_IP_ECN, flow->tos & IP_ECN_MASK);
}
+ if (!(wc & FWW_NW_TTL)) {
+ nxm_put_8(b, NXM_NX_IP_TTL, flow->nw_ttl);
+ }
+
if (!(wc & FWW_NW_PROTO)) {
nxm_put_8(b, NXM_OF_IP_PROTO, flow->nw_proto);
switch (flow->nw_proto) {
@@ -550,6 +554,10 @@ nx_put_match(struct ofpbuf *b, const struct cls_rule *cr)
nxm_put_8(b, NXM_NX_IP_ECN, flow->tos & IP_ECN_MASK);
}
+ if (!(wc & FWW_NW_TTL)) {
+ nxm_put_8(b, NXM_NX_IP_TTL, flow->nw_ttl);
+ }
+
if (!(wc & FWW_NW_PROTO)) {
nxm_put_8(b, NXM_OF_IP_PROTO, flow->nw_proto);
switch (flow->nw_proto) {
@@ -1058,6 +1066,9 @@ nxm_read_field(const struct nxm_field *src, const struct flow *flow)
case NFI_NXM_NX_IP_ECN:
return flow->tos & IP_ECN_MASK;
+ case NFI_NXM_NX_IP_TTL:
+ return flow->nw_ttl;
+
case NFI_NXM_NX_IP_FRAG:
return flow->frag;
@@ -1218,6 +1229,10 @@ nxm_write_field(const struct nxm_field *dst, struct flow *flow,
flow->tos |= new_value & IP_ECN_MASK;
break;
+ case NFI_NXM_NX_IP_TTL:
+ flow->nw_ttl = new_value;
+ break;
+
case NFI_NXM_NX_IP_FRAG:
flow->frag = new_value;
break;