* [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy
@ 2018-03-31 9:14 liujian56
2018-03-31 9:22 ` Nikolay Aleksandrov
2018-03-31 23:59 ` kbuild test robot
0 siblings, 2 replies; 4+ messages in thread
From: liujian56 @ 2018-03-31 9:14 UTC (permalink / raw)
To: davem, j.vosburgh, vfalico, andy; +Cc: netdev, weiyongjun1, liujian56
From: liujian <liujian56@huawei.com>
When the hash policy is BOND_XMIT_POLICY_LAYER34 mode and skb protocol
is 802.1q VLAN, the policy will be degenerated to LAYER2 mode; Now,
change it to get the next layer protocol to ensure that it worked in
BOND_XMIT_POLICY_LAYER34 mode.
Signed-off-by: liujian <liujian56@huawei.com>
---
drivers/net/bonding/bond_main.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index c669554..d9f58819 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3206,14 +3206,19 @@ static bool bond_flow_dissect(struct bonding *bond, struct sk_buff *skb,
{
const struct ipv6hdr *iph6;
const struct iphdr *iph;
- int noff, proto = -1;
+ int noff, proto = -1, skbproto;
if (bond->params.xmit_policy > BOND_XMIT_POLICY_LAYER23)
return skb_flow_dissect_flow_keys(skb, fk, 0);
fk->ports.ports = 0;
noff = skb_network_offset(skb);
- if (skb->protocol == htons(ETH_P_IP)) {
+
+ skbproto = skb->protocol;
+ if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER34)
+ skbproto = vlan_get_protocol(skb);
+
+ if (skbproto == htons(ETH_P_IP)) {
if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph))))
return false;
iph = ip_hdr(skb);
@@ -3221,7 +3226,7 @@ static bool bond_flow_dissect(struct bonding *bond, struct sk_buff *skb,
noff += iph->ihl << 2;
if (!ip_is_fragment(iph))
proto = iph->protocol;
- } else if (skb->protocol == htons(ETH_P_IPV6)) {
+ } else if (skbproto == htons(ETH_P_IPV6)) {
if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph6))))
return false;
iph6 = ipv6_hdr(skb);
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy
2018-03-31 9:14 [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy liujian56
@ 2018-03-31 9:22 ` Nikolay Aleksandrov
2018-04-02 10:53 ` liujian (CE)
2018-03-31 23:59 ` kbuild test robot
1 sibling, 1 reply; 4+ messages in thread
From: Nikolay Aleksandrov @ 2018-03-31 9:22 UTC (permalink / raw)
To: liujian56, davem, j.vosburgh, vfalico, andy; +Cc: netdev, weiyongjun1
On 31/03/18 12:14, liujian56@huawei.com wrote:
> From: liujian <liujian56@huawei.com>
>
> When the hash policy is BOND_XMIT_POLICY_LAYER34 mode and skb protocol
> is 802.1q VLAN, the policy will be degenerated to LAYER2 mode; Now,
> change it to get the next layer protocol to ensure that it worked in
> BOND_XMIT_POLICY_LAYER34 mode.
>
> Signed-off-by: liujian <liujian56@huawei.com>
> ---
> drivers/net/bonding/bond_main.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
Nak
Use BOND_XMIT_POLICY_ENCAP34 (encap3+4), that was one of the main reasons it was added.
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy
2018-03-31 9:22 ` Nikolay Aleksandrov
@ 2018-04-02 10:53 ` liujian (CE)
0 siblings, 0 replies; 4+ messages in thread
From: liujian (CE) @ 2018-04-02 10:53 UTC (permalink / raw)
To: Nikolay Aleksandrov, davem@davemloft.net, j.vosburgh@gmail.com,
vfalico@gmail.com, andy@greyhouse.net
Cc: netdev@vger.kernel.org, weiyongjun (A)
> -----Original Message-----
> From: Nikolay Aleksandrov [mailto:nikolay@cumulusnetworks.com]
> Sent: Saturday, March 31, 2018 5:23 PM
> To: liujian (CE) <liujian56@huawei.com>; davem@davemloft.net;
> j.vosburgh@gmail.com; vfalico@gmail.com; andy@greyhouse.net
> Cc: netdev@vger.kernel.org; weiyongjun (A) <weiyongjun1@huawei.com>
> Subject: Re: [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy
>
> On 31/03/18 12:14, liujian56@huawei.com wrote:
> > From: liujian <liujian56@huawei.com>
> >
> > When the hash policy is BOND_XMIT_POLICY_LAYER34 mode and skb
> protocol
> > is 802.1q VLAN, the policy will be degenerated to LAYER2 mode; Now,
> > change it to get the next layer protocol to ensure that it worked in
> > BOND_XMIT_POLICY_LAYER34 mode.
> >
> > Signed-off-by: liujian <liujian56@huawei.com>
> > ---
> > drivers/net/bonding/bond_main.c | 11 ++++++++---
> > 1 file changed, 8 insertions(+), 3 deletions(-)
>
>
> Nak
> Use BOND_XMIT_POLICY_ENCAP34 (encap3+4), that was one of the main
> reasons it was added.
Got it, thank you~
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy
2018-03-31 9:14 [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy liujian56
2018-03-31 9:22 ` Nikolay Aleksandrov
@ 2018-03-31 23:59 ` kbuild test robot
1 sibling, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2018-03-31 23:59 UTC (permalink / raw)
To: liujian56
Cc: kbuild-all, davem, j.vosburgh, vfalico, andy, netdev, weiyongjun1,
liujian56
Hi liujian,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/master]
[also build test WARNING on v4.16-rc7 next-20180329]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/liujian56-huawei-com/net-bond-skip-vlan-header-when-do-layer-3-4-hash-policy/20180401-045327
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>)
drivers/net/bonding/bond_main.c:2343:26: sparse: restricted __be16 degrades to integer
drivers/net/bonding/bond_main.c:2349:20: sparse: restricted __be16 degrades to integer
drivers/net/bonding/bond_main.c:2396:40: sparse: incorrect type in assignment (different base types) @@ expected restricted __be16 [usertype] vlan_proto @@ got e] vlan_proto @@
drivers/net/bonding/bond_main.c:2396:40: expected restricted __be16 [usertype] vlan_proto
drivers/net/bonding/bond_main.c:2396:40: got int
>> drivers/net/bonding/bond_main.c:3217:18: sparse: incorrect type in assignment (different base types) @@ expected int [signed] skbproto @@ got restricted __be1int [signed] skbproto @@
drivers/net/bonding/bond_main.c:3217:18: expected int [signed] skbproto
drivers/net/bonding/bond_main.c:3217:18: got restricted __be16 [usertype] protocol
>> drivers/net/bonding/bond_main.c:3219:26: sparse: incorrect type in assignment (different base types) @@ expected int [signed] skbproto @@ got restint [signed] skbproto @@
drivers/net/bonding/bond_main.c:3219:26: expected int [signed] skbproto
drivers/net/bonding/bond_main.c:3219:26: got restricted __be16
drivers/net/bonding/bond_main.c:3221:25: sparse: restricted __be16 degrades to integer
drivers/net/bonding/bond_main.c:3229:32: sparse: restricted __be16 degrades to integer
drivers/net/bonding/bond_main.c:3199:60: sparse: restricted __be16 degrades to integer
drivers/net/bonding/bond_main.c:3199:60: sparse: restricted __be16 degrades to integer
vim +3217 drivers/net/bonding/bond_main.c
3202
3203 /* Extract the appropriate headers based on bond's xmit policy */
3204 static bool bond_flow_dissect(struct bonding *bond, struct sk_buff *skb,
3205 struct flow_keys *fk)
3206 {
3207 const struct ipv6hdr *iph6;
3208 const struct iphdr *iph;
3209 int noff, proto = -1, skbproto;
3210
3211 if (bond->params.xmit_policy > BOND_XMIT_POLICY_LAYER23)
3212 return skb_flow_dissect_flow_keys(skb, fk, 0);
3213
3214 fk->ports.ports = 0;
3215 noff = skb_network_offset(skb);
3216
> 3217 skbproto = skb->protocol;
3218 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER34)
> 3219 skbproto = vlan_get_protocol(skb);
3220
3221 if (skbproto == htons(ETH_P_IP)) {
3222 if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph))))
3223 return false;
3224 iph = ip_hdr(skb);
3225 iph_to_flow_copy_v4addrs(fk, iph);
3226 noff += iph->ihl << 2;
3227 if (!ip_is_fragment(iph))
3228 proto = iph->protocol;
3229 } else if (skbproto == htons(ETH_P_IPV6)) {
3230 if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph6))))
3231 return false;
3232 iph6 = ipv6_hdr(skb);
3233 iph_to_flow_copy_v6addrs(fk, iph6);
3234 noff += sizeof(*iph6);
3235 proto = iph6->nexthdr;
3236 } else {
3237 return false;
3238 }
3239 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER34 && proto >= 0)
3240 fk->ports.ports = skb_flow_get_ports(skb, noff, proto);
3241
3242 return true;
3243 }
3244
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-04-02 10:53 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-31 9:14 [PATCH] net: bond: skip vlan header when do layer 3+4 hash policy liujian56
2018-03-31 9:22 ` Nikolay Aleksandrov
2018-04-02 10:53 ` liujian (CE)
2018-03-31 23:59 ` kbuild test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox