mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
Add support for set_mpls_ttl action
This adds support for the OpenFlow 1.1+ set_mpls_ttl action. And also adds an NX set_mpls_ttl action. The handling of the TTL modification is entirely handled in userspace. Reviewed-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -406,6 +406,12 @@ ofpact_from_nxast(const union ofp_action *a, enum ofputil_action_code code,
|
||||
break;
|
||||
}
|
||||
|
||||
case OFPUTIL_NXAST_SET_MPLS_TTL: {
|
||||
struct nx_action_mpls_ttl *nxamt = (struct nx_action_mpls_ttl *)a;
|
||||
ofpact_put_SET_MPLS_TTL(out)->ttl = nxamt->ttl;
|
||||
break;
|
||||
}
|
||||
|
||||
case OFPUTIL_NXAST_DEC_MPLS_TTL:
|
||||
ofpact_put_DEC_MPLS_TTL(out);
|
||||
break;
|
||||
@@ -790,6 +796,12 @@ ofpact_from_openflow11(const union ofp_action *a, struct ofpbuf *out)
|
||||
return nxm_reg_load_from_openflow12_set_field(
|
||||
(const struct ofp12_action_set_field *)a, out);
|
||||
|
||||
case OFPUTIL_OFPAT11_SET_MPLS_TTL: {
|
||||
struct ofp11_action_mpls_ttl *oamt = (struct ofp11_action_mpls_ttl *)a;
|
||||
ofpact_put_SET_MPLS_TTL(out)->ttl = oamt->mpls_ttl;
|
||||
break;
|
||||
}
|
||||
|
||||
case OFPUTIL_OFPAT11_DEC_MPLS_TTL:
|
||||
ofpact_put_DEC_MPLS_TTL(out);
|
||||
break;
|
||||
@@ -1144,6 +1156,7 @@ ofpact_check__(const struct ofpact *a, const struct flow *flow, int max_ports,
|
||||
}
|
||||
|
||||
case OFPACT_DEC_TTL:
|
||||
case OFPACT_SET_MPLS_TTL:
|
||||
case OFPACT_DEC_MPLS_TTL:
|
||||
case OFPACT_SET_TUNNEL:
|
||||
case OFPACT_SET_QUEUE:
|
||||
@@ -1392,6 +1405,11 @@ ofpact_to_nxast(const struct ofpact *a, struct ofpbuf *out)
|
||||
ofpact_dec_ttl_to_nxast(ofpact_get_DEC_TTL(a), out);
|
||||
break;
|
||||
|
||||
case OFPACT_SET_MPLS_TTL:
|
||||
ofputil_put_NXAST_SET_MPLS_TTL(out)->ttl
|
||||
= ofpact_get_SET_MPLS_TTL(a)->ttl;
|
||||
break;
|
||||
|
||||
case OFPACT_DEC_MPLS_TTL:
|
||||
ofputil_put_NXAST_DEC_MPLS_TTL(out);
|
||||
break;
|
||||
@@ -1563,6 +1581,7 @@ ofpact_to_openflow10(const struct ofpact *a, struct ofpbuf *out)
|
||||
case OFPACT_REG_MOVE:
|
||||
case OFPACT_REG_LOAD:
|
||||
case OFPACT_DEC_TTL:
|
||||
case OFPACT_SET_MPLS_TTL:
|
||||
case OFPACT_DEC_MPLS_TTL:
|
||||
case OFPACT_SET_TUNNEL:
|
||||
case OFPACT_WRITE_METADATA:
|
||||
@@ -1696,6 +1715,11 @@ ofpact_to_openflow11(const struct ofpact *a, struct ofpbuf *out)
|
||||
ofpact_dec_ttl_to_openflow11(ofpact_get_DEC_TTL(a), out);
|
||||
break;
|
||||
|
||||
case OFPACT_SET_MPLS_TTL:
|
||||
ofputil_put_OFPAT11_SET_MPLS_TTL(out)->mpls_ttl
|
||||
= ofpact_get_SET_MPLS_TTL(a)->ttl;
|
||||
break;
|
||||
|
||||
case OFPACT_DEC_MPLS_TTL:
|
||||
ofputil_put_OFPAT11_DEC_MPLS_TTL(out);
|
||||
break;
|
||||
@@ -1844,6 +1868,7 @@ ofpact_outputs_to_port(const struct ofpact *ofpact, uint16_t port)
|
||||
case OFPACT_REG_MOVE:
|
||||
case OFPACT_REG_LOAD:
|
||||
case OFPACT_DEC_TTL:
|
||||
case OFPACT_SET_MPLS_TTL:
|
||||
case OFPACT_DEC_MPLS_TTL:
|
||||
case OFPACT_SET_TUNNEL:
|
||||
case OFPACT_WRITE_METADATA:
|
||||
@@ -2067,6 +2092,11 @@ ofpact_format(const struct ofpact *a, struct ds *s)
|
||||
print_dec_ttl(ofpact_get_DEC_TTL(a), s);
|
||||
break;
|
||||
|
||||
case OFPACT_SET_MPLS_TTL:
|
||||
ds_put_format(s, "set_mpls_ttl(%"PRIu8")",
|
||||
ofpact_get_SET_MPLS_TTL(a)->ttl);
|
||||
break;
|
||||
|
||||
case OFPACT_DEC_MPLS_TTL:
|
||||
ds_put_cstr(s, "dec_mpls_ttl");
|
||||
break;
|
||||
|
Reference in New Issue
Block a user