source: trunk/openwrt/target/linux/linux-2.6/patches/generic/102-openswan-2.4.0.kernel-2.6-natt.patch @ 1953

Last change on this file since 1953 was 1953, checked in by wbx, 11 years ago

nat-t patch for 2.6

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
  • new file nat-t/include/net/xfrmudp.h

    packaging/utils/nattpatch 2.6
    - +  
     1/* 
     2 * pointer to function for type that xfrm4_input wants, to permit 
     3 * decoupling of XFRM from udp.c 
     4 */ 
     5#define HAVE_XFRM4_UDP_REGISTER 
     6 
     7typedef int (*xfrm4_rcv_encap_t)(struct sk_buff *skb, __u16 encap_type); 
     8extern int udp4_register_esp_rcvencap(xfrm4_rcv_encap_t func 
     9                                      , xfrm4_rcv_encap_t *oldfunc); 
     10extern int udp4_unregister_esp_rcvencap(xfrm4_rcv_encap_t func); 
  • net/ipv4/Kconfig

    old new  
    351351 
     352config IPSEC_NAT_TRAVERSAL 
     353        bool "IPSEC NAT-Traversal (KLIPS compatible)" 
     354        depends on INET 
     355        ---help--- 
     356          Includes support for RFC3947/RFC3948 NAT-Traversal of ESP over UDP. 
     357 
    352358config IP_TCPDIAG 
  • ./net/ipv4/udp.c

    old new  
    109109#include <net/xfrm.h> 
     110#include <net/xfrmudp.h> 
    110111 
     
    114115 
     116static xfrm4_rcv_encap_t xfrm4_rcv_encap_func; 
     117 
    115118DEFINE_SNMP_STAT(struct udp_mib, udp_statistics); 
     
    894897 
     898#if defined(CONFIG_XFRM) || defined(CONFIG_IPSEC_NAT_TRAVERSAL) 
     899 
     900/* if XFRM isn't a module, then register it directly. */ 
     901#if 0 && !defined(CONFIG_XFRM_MODULE) && !defined(CONFIG_IPSEC_NAT_TRAVERSAL) 
     902static xfrm4_rcv_encap_t xfrm4_rcv_encap_func = xfrm4_rcv_encap; 
     903#else 
     904static xfrm4_rcv_encap_t xfrm4_rcv_encap_func = NULL; 
     905#endif 
     906 
     907int udp4_register_esp_rcvencap(xfrm4_rcv_encap_t func 
     908                               , xfrm4_rcv_encap_t *oldfunc) 
     909{ 
     910  if(oldfunc != NULL) { 
     911    *oldfunc = xfrm4_rcv_encap_func; 
     912  } 
     913 
     914#if 0 
     915  if(xfrm4_rcv_encap_func != NULL) 
     916    return -1; 
     917#endif 
     918 
     919  xfrm4_rcv_encap_func = func; 
     920  return 0; 
     921} 
     922 
     923int udp4_unregister_esp_rcvencap(xfrm4_rcv_encap_t func) 
     924{ 
     925  if(xfrm4_rcv_encap_func != func) 
     926    return -1; 
     927 
     928  xfrm4_rcv_encap_func = NULL; 
     929  return 0; 
     930} 
     931#endif /* CONFIG_XFRM_MODULE || CONFIG_IPSEC_NAT_TRAVERSAL */ 
     932 
     933 
    895934/* return: 
     
    901940{ 
    902 #ifndef CONFIG_XFRM 
     941#if !defined(CONFIG_XFRM) && !defined(CONFIG_IPSEC_NAT_TRAVERSAL) 
    903942        return 1;  
    904 #else 
     943#else /* either CONFIG_XFRM or CONFIG_IPSEC_NAT_TRAVERSAL */ 
    905944        struct udp_sock *up = udp_sk(sk); 
     
    915954        if (udpdata > skb->tail) 
    916                 return 1; 
     955                return 2; 
    917956 
     
    919958        if (!encap_type) 
    920                 return 1; 
     959                return 3; 
    921960 
     
    934973                        /* Must be an IKE packet.. pass it through */ 
    935                         return 1; 
     974                        return 4; 
    936975                break; 
     
    947986                        /* Must be an IKE packet.. pass it through */ 
    948                         return 1; 
     987                        return 5; 
    949988                break; 
     
    956995         */ 
     996        if (skb_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) 
     997                return 0; 
    957998 
     
    10191060                if (ret < 0) { 
    1020                         /* process the ESP packet */ 
    1021                         ret = xfrm4_rcv_encap(skb, up->encap_type); 
    1022                         UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS); 
     1061                        if(xfrm4_rcv_encap_func != NULL) { 
     1062                          ret = (*xfrm4_rcv_encap_func)(skb, up->encap_type); 
     1063                          UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS); 
     1064                        } else { 
     1065                          UDP_INC_STATS_BH(UDP_MIB_INERRORS); 
     1066                          ret = 1; 
     1067                        } 
    10231068                        return -ret; 
     
    15741619#endif 
     1620 
     1621#if defined(CONFIG_IPSEC_NAT_TRAVERSAL) 
     1622EXPORT_SYMBOL(udp4_register_esp_rcvencap); 
     1623EXPORT_SYMBOL(udp4_unregister_esp_rcvencap); 
     1624#endif 
     1625 
Note: See TracBrowser for help on using the repository browser.