ipip.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef __NET_IPIP_H
  2. #define __NET_IPIP_H 1
  3. #include <linux/if_tunnel.h>
  4. /* Keep error state on tunnel for 30 sec */
  5. #define IPTUNNEL_ERR_TIMEO (30*HZ)
  6. struct ip_tunnel
  7. {
  8. struct ip_tunnel *next;
  9. struct net_device *dev;
  10. struct net_device_stats stat;
  11. int recursion; /* Depth of hard_start_xmit recursion */
  12. int err_count; /* Number of arrived ICMP errors */
  13. unsigned long err_time; /* Time when the last ICMP error arrived */
  14. /* These four fields used only by GRE */
  15. __u32 i_seqno; /* The last seen seqno */
  16. __u32 o_seqno; /* The last output seqno */
  17. int hlen; /* Precalculated GRE header length */
  18. int mlink;
  19. struct ip_tunnel_parm parms;
  20. };
  21. #define IPTUNNEL_XMIT() do {
  22. int err;
  23. int pkt_len = skb->len;
  24. skb->ip_summed = CHECKSUM_NONE;
  25. iph->tot_len = htons(skb->len);
  26. ip_select_ident(iph, &rt->u.dst, NULL);
  27. ip_send_check(iph);
  28. err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev, do_ip_send); 
  29. if (err == NET_XMIT_SUCCESS || err == NET_XMIT_CN) {
  30. stats->tx_bytes += pkt_len;
  31. stats->tx_packets++;
  32. } else {
  33. stats->tx_errors++;
  34. stats->tx_aborted_errors++;
  35. }
  36. } while (0)
  37. extern int ipip_init(void);
  38. extern int ipgre_init(void);
  39. extern int sit_init(void);
  40. extern void sit_cleanup(void);
  41. #endif