*/staticnetdev_tx_tloopback_xmit(struct sk_buff *skb, struct net_device *dev){structpcpu_lstats*pcpu_lstats, *lb_stats;intlen;#ifdefCONFIG_VEif(unlikely(get_exec_env()->disable_net)) { kfree_skb(skb);return0; }#endifskb_orphan(skb); skb->protocol = eth_type_trans(skb, dev)...
err = skb_copy_datagram_iovec(skb,0, msg->msg_iov, copied);if(err)gotoout_free_skb; sock_recv_timestamp(msg, sk, skb); serr =SKB_EXT_ERR(skb);sin= (struct sockaddr_in6 *)msg->msg_name;if(sin) {constunsignedchar*nh = skb_network_header(skb);sin->sin6_family = AF_INET6;...
if(icsk->icsk_ca_ops->flags&TCP_CONG_RTT_STAMP) __net_timestamp(skb); /*根据传递进来的clone_it参数来确定是否需要克隆待发送的报文。*/ if(likely(clone_it)) { /*如果skb已经被clone,则只能复制该skb的数据到新分配的skb中*/ if(unlikely(skb_cloned(skb))) skb=pskb_copy(skb,gfp_mask);...
if (icsk->icsk_ca_ops->flags & TCP_CONG_RTT_STAMP) __net_timestamp(skb); /*根据传递进来的clone_it参数来确定是否需要克隆待发送的报文。*/ if (likely(clone_it)) { /*如果skb已经被clone,则只能复制该skb的数据到新分配的skb中*/ if (unlikely(skb_cloned(skb))) skb = pskb_copy(skb,...
maybe_deliver是deliver_clone的包装,每次遍历端口后,会在下一个遍历周期,将数据从本次遍历端口发送,最后一个端口的数据则是直接使用原始的skb,这样可以少一次数据复制开销。 4 二层对多播的处理 4.1 一些概念 IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。 它是TCP/IP 协议族中负责IP 组播...
if (icsk->icsk_ca_ops->flags & TCP_CONG_RTT_STAMP) __net_timestamp(skb); /*根据传递进来的clone_it参数来确定是否需要克隆待发送的报文。*/ if (likely(clone_it)) { /*如果skb已经被clone,则只能复制该skb的数据到新分配的skb中*/
示例14: skb_unclone ▲點讚 1▼ staticstruct sk_buff *handle_offloads(struct ip_tunnel *tunnel, struct sk_buff *skb){interr;if(skb_is_gso(skb)) { err = skb_unclone(skb, GFP_ATOMIC);if(unlikely(err))gotoerror; skb_shinfo(skb)->gso_type |= SKB_GSO_GRE;returnskb; ...
示例12: skb_clone ▲点赞 1▼ staticstruct sock *run_bpf(struct sock_reuseport *reuse, u16 socks, struct bpf_prog *prog, struct sk_buff *skb,inthdr_len){structsk_buff*nskb=NULL;u32 index;if(skb_shared(skb)) { nskb = skb_clone(skb, GFP_ATOMIC);if(!nskb)returnNULL; ...
skb->dst = dst_clone(pkt->dst); skb->ip_summed = CHECKSUM_UNNECESSARY; skb_pull(skb,sizeof(struct ipv6hdr)); }if(mroute6_socket ==NULL) { kfree_skb(skb);return-EINVAL; }/* * Deliver to user space multicast routing algorithms ...
err = sock_tx_timestamp(msg, sk, skb_tx(skb));if(err <0)gotofree_skb; skb->dev = dev; skb->sk = sk; err = can_send(skb, ro->loopback); dev_put(dev);if(err)gotosend_failed;returnsize; free_skb: kfree_skb(skb);