Hi Paolo, Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master] url: https://github.com/0day-ci/linux/commits/Paolo-Abeni/TC-refactor-act_mirred-packets-re-injection/20180729-102154 config: i386-randconfig-n0-201829 (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): net//core/dev.c: In function 'netif_receive_generic_xdp': >> net//core/dev.c:4255:28: error: 'struct sk_buff' has no member named >> 'tc_redirected' if (skb_cloned(skb) || skb->tc_redirected) ^~ vim +4255 net//core/dev.c 4241 4242 static u32 netif_receive_generic_xdp(struct sk_buff *skb, 4243 struct xdp_buff *xdp, 4244 struct bpf_prog *xdp_prog) 4245 { 4246 struct netdev_rx_queue *rxqueue; 4247 void *orig_data, *orig_data_end; 4248 u32 metalen, act = XDP_DROP; 4249 int hlen, off; 4250 u32 mac_len; 4251 4252 /* Reinjected packets coming from act_mirred or similar should 4253 * not get XDP generic processing. 4254 */ > 4255 if (skb_cloned(skb) || skb->tc_redirected) 4256 return XDP_PASS; 4257 4258 /* XDP packets must be linear and must have sufficient headroom 4259 * of XDP_PACKET_HEADROOM bytes. This is the guarantee that also 4260 * native XDP provides, thus we need to do it here as well. 4261 */ 4262 if (skb_is_nonlinear(skb) || 4263 skb_headroom(skb) < XDP_PACKET_HEADROOM) { 4264 int hroom = XDP_PACKET_HEADROOM - skb_headroom(skb); 4265 int troom = skb->tail + skb->data_len - skb->end; 4266 4267 /* In case we have to go down the path and also linearize, 4268 * then lets do the pskb_expand_head() work just once here. 4269 */ 4270 if (pskb_expand_head(skb, 4271 hroom > 0 ? ALIGN(hroom, NET_SKB_PAD) : 0, 4272 troom > 0 ? troom + 128 : 0, GFP_ATOMIC)) 4273 goto do_drop; 4274 if (skb_linearize(skb)) 4275 goto do_drop; 4276 } 4277 4278 /* The XDP program wants to see the packet starting at the MAC 4279 * header. 4280 */ 4281 mac_len = skb->data - skb_mac_header(skb); 4282 hlen = skb_headlen(skb) + mac_len; 4283 xdp->data = skb->data - mac_len; 4284 xdp->data_meta = xdp->data; 4285 xdp->data_end = xdp->data + hlen; 4286 xdp->data_hard_start = skb->data - skb_headroom(skb); 4287 orig_data_end = xdp->data_end; 4288 orig_data = xdp->data; 4289 4290 rxqueue = netif_get_rxqueue(skb); 4291 xdp->rxq = &rxqueue->xdp_rxq; 4292 4293 act = bpf_prog_run_xdp(xdp_prog, xdp); 4294 4295 off = xdp->data - orig_data; 4296 if (off > 0) 4297 __skb_pull(skb, off); 4298 else if (off < 0) 4299 __skb_push(skb, -off); 4300 skb->mac_header += off; 4301 4302 /* check if bpf_xdp_adjust_tail was used. it can only "shrink" 4303 * pckt. 4304 */ 4305 off = orig_data_end - xdp->data_end; 4306 if (off != 0) { 4307 skb_set_tail_pointer(skb, xdp->data_end - xdp->data); 4308 skb->len -= off; 4309 4310 } 4311 4312 switch (act) { 4313 case XDP_REDIRECT: 4314 case XDP_TX: 4315 __skb_push(skb, mac_len); 4316 break; 4317 case XDP_PASS: 4318 metalen = xdp->data - xdp->data_meta; 4319 if (metalen) 4320 skb_metadata_set(skb, metalen); 4321 break; 4322 default: 4323 bpf_warn_invalid_xdp_action(act); 4324 /* fall through */ 4325 case XDP_ABORTED: 4326 trace_xdp_exception(skb->dev, xdp_prog, act); 4327 /* fall through */ 4328 case XDP_DROP: 4329 do_drop: 4330 kfree_skb(skb); 4331 break; 4332 } 4333 4334 return act; 4335 } 4336 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip