📄 myip_forward.c
字号:
static inline int myip_forward_finish(struct sk_buff *skb){ struct ip_options * opt = &(IPCB(skb)->opt); //MYIP_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS); //if( unlikely(opt->optlen) ) // ip_forward_options(skb); return dst_output(skb);}int myip_forward(struct sk_buff *skb){ struct iphdr *iph; struct rtable *rt; struct ip_options * opt = &(IPCB(skb)->opt); printk(KERN_INFO "forward the packet!\n"); //if (!xfrm4_policy_check(NULL, XFRM_POLICY_FWD, skb)) // goto drop; //if (IPCB(skb)->opt.router_alert && ip_call_ra_chain(skb)) // return NET_RX_SUCCESS; if (skb->pkt_type != PACKET_HOST) goto drop; skb->ip_summed = CHECKSUM_NONE; if (skb->nh.iph->ttl <= 1) goto too_many_hops; //if (!xfrm4_route_forward(skb)) // goto drop; rt = (struct rtable*)skb->dst; if (opt->is_strictroute && rt->rt_dst != rt->rt_gateway) goto sr_failed; if (skb_cow(skb, LL_RESERVED_SPACE(rt->u.dst.dev)+rt->u.dst.header_len)) goto drop; iph = skb->nh.iph; ip_decrease_ttl(iph); //if (rt->rt_flags&RTCF_DOREDIRECT && !opt->srr) // ip_rt_send_redirect(skb); //skb->priority = rt_tos2priority(iph->tos); return NF_HOOK(MY_PF_INET, NF_IP_FORWARD, skb, skb->dev, rt->u.dst.dev, myip_forward_finish);sr_failed: //icmp_send(skb, ICMP_DEST_UNREACH, ICMP_SR_FAILED, 0); goto drop;too_many_hops: /* Tell the sender its packet died... */ //icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);drop: kfree_skb(skb); return NET_RX_DROP;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -