Add NXM definitions for tun_src and tun_dst, allowing them to be used in matching and setting them via SetField action.
Signed-off-by: Jarno Rajahalme <jarno.rajaha...@nsn.com> --- include/openflow/nicira-ext.h | 3 +++ lib/meta-flow.c | 26 ++++++++++++++++---------- lib/nx-match.c | 8 +++++++- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index 11b761d..d250623 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -1763,6 +1763,9 @@ OFP_ASSERT(sizeof(struct nx_action_output_reg) == 24); #define NXM_NX_COOKIE NXM_HEADER (0x0001, 30, 8) #define NXM_NX_COOKIE_W NXM_HEADER_W(0x0001, 30, 8) +#define NXM_NX_TUN_IPV4_SRC NXM_HEADER (0x0001, 31, 4) +#define NXM_NX_TUN_IPV4_DST NXM_HEADER (0x0001, 32, 4) + /* ## --------------------- ## */ /* ## Requests and replies. ## */ /* ## --------------------- ## */ diff --git a/lib/meta-flow.c b/lib/meta-flow.c index 749898f..e4aa259 100644 --- a/lib/meta-flow.c +++ b/lib/meta-flow.c @@ -58,21 +58,21 @@ static const struct mf_field mf_fields[MFF_N_IDS] = { }, { MFF_TUN_SRC, "tun_src", NULL, MF_FIELD_SIZES(be32), - MFM_NONE, + MFM_FULLY, MFS_IPV4, MFP_NONE, - false, - 0, NULL, - 0, NULL, + true, + NXM_NX_TUN_IPV4_SRC, "NXM_NX_TUN_IPV4_SRC", + NXM_NX_TUN_IPV4_SRC, "NXM_NX_TUN_IPV4_SRC", }, { MFF_TUN_DST, "tun_dst", NULL, MF_FIELD_SIZES(be32), - MFM_NONE, + MFM_FULLY, MFS_IPV4, MFP_NONE, - false, - 0, NULL, - 0, NULL, + true, + NXM_NX_TUN_IPV4_DST, "NXM_NX_TUN_IPV4_DST", + NXM_NX_TUN_IPV4_DST, "NXM_NX_TUN_IPV4_DST", }, { MFF_TUN_FLAGS, "tun_flags", NULL, MF_FIELD_SIZES(be16), @@ -618,9 +618,11 @@ bool mf_is_all_wild(const struct mf_field *mf, const struct flow_wildcards *wc) { switch (mf->id) { - case MFF_TUN_ID: case MFF_TUN_SRC: + return !wc->masks.tunnel.ip_src; case MFF_TUN_DST: + return !wc->masks.tunnel.ip_dst; + case MFF_TUN_ID: case MFF_TUN_TOS: case MFF_TUN_TTL: case MFF_TUN_FLAGS: @@ -720,9 +722,13 @@ mf_get_mask(const struct mf_field *mf, const struct flow_wildcards *wc, union mf_value *mask) { switch (mf->id) { - case MFF_TUN_ID: case MFF_TUN_SRC: + mask->be32 = wc->masks.tunnel.ip_src; + break; case MFF_TUN_DST: + mask->be32 = wc->masks.tunnel.ip_dst; + break; + case MFF_TUN_ID: case MFF_TUN_TOS: case MFF_TUN_TTL: case MFF_TUN_FLAGS: diff --git a/lib/nx-match.c b/lib/nx-match.c index 05f1ce9..7715b91 100644 --- a/lib/nx-match.c +++ b/lib/nx-match.c @@ -645,7 +645,13 @@ nx_put_raw(struct ofpbuf *b, bool oxm, const struct match *match, /* Tunnel ID. */ nxm_put_64m(b, oxm ? OXM_OF_TUNNEL_ID : NXM_NX_TUN_ID, - flow->tunnel.tun_id, match->wc.masks.tunnel.tun_id); + flow->tunnel.tun_id, match->wc.masks.tunnel.tun_id); + + /* Other tunnel metadata. */ + nxm_put_32m(b, NXM_NX_TUN_IPV4_SRC, + flow->tunnel.ip_src, match->wc.masks.tunnel.ip_src); + nxm_put_32m(b, NXM_NX_TUN_IPV4_DST, + flow->tunnel.ip_dst, match->wc.masks.tunnel.ip_dst); /* Registers. */ for (i = 0; i < FLOW_N_REGS; i++) { -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev