diff options
author | David S. Miller <davem@davemloft.net> | 2015-10-20 09:08:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-20 09:08:27 -0400 |
commit | 26440c835f8b1a491e2704118ac55bf87334366c (patch) | |
tree | 3c2d23b59fd49b252fdbf6c09efc41b354933fc6 /net/openvswitch/flow_netlink.c | |
parent | 371f1c7e0d854796adc622cc3bacfcc5fc638db1 (diff) | |
parent | 1099f86044111e9a7807f09523e42d4c9d0fb781 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/usb/asix_common.c
net/ipv4/inet_connection_sock.c
net/switchdev/switchdev.c
In the inet_connection_sock.c case the request socket hashing scheme
is completely different in net-next.
The other two conflicts were overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch/flow_netlink.c')
-rw-r--r-- | net/openvswitch/flow_netlink.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c index 77850f177a47..6799c8d470c6 100644 --- a/net/openvswitch/flow_netlink.c +++ b/net/openvswitch/flow_netlink.c | |||
@@ -291,10 +291,10 @@ size_t ovs_key_attr_size(void) | |||
291 | + nla_total_size(4) /* OVS_KEY_ATTR_SKB_MARK */ | 291 | + nla_total_size(4) /* OVS_KEY_ATTR_SKB_MARK */ |
292 | + nla_total_size(4) /* OVS_KEY_ATTR_DP_HASH */ | 292 | + nla_total_size(4) /* OVS_KEY_ATTR_DP_HASH */ |
293 | + nla_total_size(4) /* OVS_KEY_ATTR_RECIRC_ID */ | 293 | + nla_total_size(4) /* OVS_KEY_ATTR_RECIRC_ID */ |
294 | + nla_total_size(1) /* OVS_KEY_ATTR_CT_STATE */ | 294 | + nla_total_size(4) /* OVS_KEY_ATTR_CT_STATE */ |
295 | + nla_total_size(2) /* OVS_KEY_ATTR_CT_ZONE */ | 295 | + nla_total_size(2) /* OVS_KEY_ATTR_CT_ZONE */ |
296 | + nla_total_size(4) /* OVS_KEY_ATTR_CT_MARK */ | 296 | + nla_total_size(4) /* OVS_KEY_ATTR_CT_MARK */ |
297 | + nla_total_size(16) /* OVS_KEY_ATTR_CT_LABEL */ | 297 | + nla_total_size(16) /* OVS_KEY_ATTR_CT_LABELS */ |
298 | + nla_total_size(12) /* OVS_KEY_ATTR_ETHERNET */ | 298 | + nla_total_size(12) /* OVS_KEY_ATTR_ETHERNET */ |
299 | + nla_total_size(2) /* OVS_KEY_ATTR_ETHERTYPE */ | 299 | + nla_total_size(2) /* OVS_KEY_ATTR_ETHERTYPE */ |
300 | + nla_total_size(4) /* OVS_KEY_ATTR_VLAN */ | 300 | + nla_total_size(4) /* OVS_KEY_ATTR_VLAN */ |
@@ -351,10 +351,10 @@ static const struct ovs_len_tbl ovs_key_lens[OVS_KEY_ATTR_MAX + 1] = { | |||
351 | [OVS_KEY_ATTR_TUNNEL] = { .len = OVS_ATTR_NESTED, | 351 | [OVS_KEY_ATTR_TUNNEL] = { .len = OVS_ATTR_NESTED, |
352 | .next = ovs_tunnel_key_lens, }, | 352 | .next = ovs_tunnel_key_lens, }, |
353 | [OVS_KEY_ATTR_MPLS] = { .len = sizeof(struct ovs_key_mpls) }, | 353 | [OVS_KEY_ATTR_MPLS] = { .len = sizeof(struct ovs_key_mpls) }, |
354 | [OVS_KEY_ATTR_CT_STATE] = { .len = sizeof(u8) }, | 354 | [OVS_KEY_ATTR_CT_STATE] = { .len = sizeof(u32) }, |
355 | [OVS_KEY_ATTR_CT_ZONE] = { .len = sizeof(u16) }, | 355 | [OVS_KEY_ATTR_CT_ZONE] = { .len = sizeof(u16) }, |
356 | [OVS_KEY_ATTR_CT_MARK] = { .len = sizeof(u32) }, | 356 | [OVS_KEY_ATTR_CT_MARK] = { .len = sizeof(u32) }, |
357 | [OVS_KEY_ATTR_CT_LABEL] = { .len = sizeof(struct ovs_key_ct_label) }, | 357 | [OVS_KEY_ATTR_CT_LABELS] = { .len = sizeof(struct ovs_key_ct_labels) }, |
358 | }; | 358 | }; |
359 | 359 | ||
360 | static bool check_attr_len(unsigned int attr_len, unsigned int expected_len) | 360 | static bool check_attr_len(unsigned int attr_len, unsigned int expected_len) |
@@ -864,7 +864,13 @@ static int metadata_from_nlattrs(struct net *net, struct sw_flow_match *match, | |||
864 | 864 | ||
865 | if (*attrs & (1 << OVS_KEY_ATTR_CT_STATE) && | 865 | if (*attrs & (1 << OVS_KEY_ATTR_CT_STATE) && |
866 | ovs_ct_verify(net, OVS_KEY_ATTR_CT_STATE)) { | 866 | ovs_ct_verify(net, OVS_KEY_ATTR_CT_STATE)) { |
867 | u8 ct_state = nla_get_u8(a[OVS_KEY_ATTR_CT_STATE]); | 867 | u32 ct_state = nla_get_u32(a[OVS_KEY_ATTR_CT_STATE]); |
868 | |||
869 | if (!is_mask && !ovs_ct_state_supported(ct_state)) { | ||
870 | OVS_NLERR(log, "ct_state flags %08x unsupported", | ||
871 | ct_state); | ||
872 | return -EINVAL; | ||
873 | } | ||
868 | 874 | ||
869 | SW_FLOW_KEY_PUT(match, ct.state, ct_state, is_mask); | 875 | SW_FLOW_KEY_PUT(match, ct.state, ct_state, is_mask); |
870 | *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_STATE); | 876 | *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_STATE); |
@@ -883,14 +889,14 @@ static int metadata_from_nlattrs(struct net *net, struct sw_flow_match *match, | |||
883 | SW_FLOW_KEY_PUT(match, ct.mark, mark, is_mask); | 889 | SW_FLOW_KEY_PUT(match, ct.mark, mark, is_mask); |
884 | *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_MARK); | 890 | *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_MARK); |
885 | } | 891 | } |
886 | if (*attrs & (1 << OVS_KEY_ATTR_CT_LABEL) && | 892 | if (*attrs & (1 << OVS_KEY_ATTR_CT_LABELS) && |
887 | ovs_ct_verify(net, OVS_KEY_ATTR_CT_LABEL)) { | 893 | ovs_ct_verify(net, OVS_KEY_ATTR_CT_LABELS)) { |
888 | const struct ovs_key_ct_label *cl; | 894 | const struct ovs_key_ct_labels *cl; |
889 | 895 | ||
890 | cl = nla_data(a[OVS_KEY_ATTR_CT_LABEL]); | 896 | cl = nla_data(a[OVS_KEY_ATTR_CT_LABELS]); |
891 | SW_FLOW_KEY_MEMCPY(match, ct.label, cl->ct_label, | 897 | SW_FLOW_KEY_MEMCPY(match, ct.labels, cl->ct_labels, |
892 | sizeof(*cl), is_mask); | 898 | sizeof(*cl), is_mask); |
893 | *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_LABEL); | 899 | *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_LABELS); |
894 | } | 900 | } |
895 | return 0; | 901 | return 0; |
896 | } | 902 | } |
@@ -2025,7 +2031,7 @@ static int validate_set(const struct nlattr *a, | |||
2025 | case OVS_KEY_ATTR_PRIORITY: | 2031 | case OVS_KEY_ATTR_PRIORITY: |
2026 | case OVS_KEY_ATTR_SKB_MARK: | 2032 | case OVS_KEY_ATTR_SKB_MARK: |
2027 | case OVS_KEY_ATTR_CT_MARK: | 2033 | case OVS_KEY_ATTR_CT_MARK: |
2028 | case OVS_KEY_ATTR_CT_LABEL: | 2034 | case OVS_KEY_ATTR_CT_LABELS: |
2029 | case OVS_KEY_ATTR_ETHERNET: | 2035 | case OVS_KEY_ATTR_ETHERNET: |
2030 | break; | 2036 | break; |
2031 | 2037 | ||