Skip to content

Commit

Permalink
openvswitch: Simplify labels length logic.
Browse files Browse the repository at this point in the history
Since 2301401 ("netfilter: conntrack: support a fixed size of 128
distinct labels"), the size of conntrack labels extension has fixed to
128 bits, so we do not need to check for labels sizes shorter than 128
at run-time.  This patch simplifies labels length logic accordingly,
but allows the conntrack labels size to be increased in the future
without breaking the build.  In the event of conntrack labels
increasing in size OVS would still be able to deal with the 128 first
label bits.

Suggested-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jarno Rajahalme authored and David S. Miller committed Feb 10, 2017
1 parent cb80d58 commit b87cec3
Showing 1 changed file with 9 additions and 11 deletions.
20 changes: 9 additions & 11 deletions net/openvswitch/conntrack.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,22 +129,20 @@ static u32 ovs_ct_get_mark(const struct nf_conn *ct)
#endif
}

/* Guard against conntrack labels max size shrinking below 128 bits. */
#if NF_CT_LABELS_MAX_SIZE < 16
#error NF_CT_LABELS_MAX_SIZE must be at least 16 bytes
#endif

static void ovs_ct_get_labels(const struct nf_conn *ct,
struct ovs_key_ct_labels *labels)
{
struct nf_conn_labels *cl = ct ? nf_ct_labels_find(ct) : NULL;

if (cl) {
size_t len = sizeof(cl->bits);

if (len > OVS_CT_LABELS_LEN)
len = OVS_CT_LABELS_LEN;
else if (len < OVS_CT_LABELS_LEN)
memset(labels, 0, OVS_CT_LABELS_LEN);
memcpy(labels, cl->bits, len);
} else {
if (cl)
memcpy(labels, cl->bits, OVS_CT_LABELS_LEN);
else
memset(labels, 0, OVS_CT_LABELS_LEN);
}
}

static void __ovs_ct_update_key(struct sw_flow_key *key, u8 state,
Expand Down Expand Up @@ -274,7 +272,7 @@ static int ovs_ct_set_labels(struct sk_buff *skb, struct sw_flow_key *key,
nf_ct_labels_ext_add(ct);
cl = nf_ct_labels_find(ct);
}
if (!cl || sizeof(cl->bits) < OVS_CT_LABELS_LEN)
if (!cl)
return -ENOSPC;

if (nf_ct_is_confirmed(ct)) {
Expand Down

0 comments on commit b87cec3

Please sign in to comment.