Netfilter 地址转换的实现(2)

2020-05-26 00:00:00 函数 调用 地址 数据包 转换

ip_nat_out

  1. static unsigned int
  2. ip_nat_out(unsigned int hooknum,
  3.            struct sk_buff **pskb,
  4.            const struct net_device *in,
  5.            const struct net_device *out,
  6.            int (*okfn)(struct sk_buff *))
  7. {
  8.         /* root is playing with raw sockets. */
  9.         if ((*pskb)->len < sizeof(struct iphdr)
  10.             || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr))
  11.                 return NF_ACCEPT;

  12.         if ((*pskb)->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) {
  13.                 *pskb = ip_ct_gather_frags(*pskb, IP_DEFRAG_NAT_OUT);

  14.                 if (!*pskb)
  15.                         return NF_STOLEN;
  16.         }

  17.         return ip_nat_fn(hooknum, pskb, in, out, okfn);
  18. }

相关文章