⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udp.c.os2_6.patch

📁 openswan
💻 PATCH
字号:
--- plain26/net/ipv4/udp.c.orig	2006-01-02 22:21:10.000000000 -0500+++ plain26/net/ipv4/udp.c	2006-01-10 20:07:21.000000000 -0500@@ -108,11 +108,14 @@ #include <net/inet_common.h> #include <net/checksum.h> #include <net/xfrm.h>+#include <net/xfrmudp.h>  /*  *	Snmp MIB for the UDP layer  */ +static xfrm4_rcv_encap_t xfrm4_rcv_encap_func;+ DEFINE_SNMP_STAT(struct udp_mib, udp_statistics) __read_mostly;  struct hlist_head udp_hash[UDP_HTABLE_SIZE];@@ -894,6 +897,42 @@ 	sk_common_release(sk); } +#if defined(CONFIG_XFRM) || defined(CONFIG_IPSEC_NAT_TRAVERSAL)++/* if XFRM isn't a module, then register it directly. */+#if 0 && !defined(CONFIG_XFRM_MODULE) && !defined(CONFIG_IPSEC_NAT_TRAVERSAL)+static xfrm4_rcv_encap_t xfrm4_rcv_encap_func = xfrm4_rcv_encap;+#else+static xfrm4_rcv_encap_t xfrm4_rcv_encap_func = NULL;+#endif++int udp4_register_esp_rcvencap(xfrm4_rcv_encap_t func+			       , xfrm4_rcv_encap_t *oldfunc)+{+  if(oldfunc != NULL) {+    *oldfunc = xfrm4_rcv_encap_func;+  }++#if 0+  if(xfrm4_rcv_encap_func != NULL)+    return -1;+#endif++  xfrm4_rcv_encap_func = func;+  return 0;+}++int udp4_unregister_esp_rcvencap(xfrm4_rcv_encap_t func)+{+  if(xfrm4_rcv_encap_func != func)+    return -1;++  xfrm4_rcv_encap_func = NULL;+  return 0;+}+#endif /* CONFIG_XFRM_MODULE || CONFIG_IPSEC_NAT_TRAVERSAL */++ /* return:  * 	1  if the the UDP system should process it  *	0  if we should drop this packet@@ -901,9 +940,9 @@  */ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb) {-#ifndef CONFIG_XFRM+#if !defined(CONFIG_XFRM) && !defined(CONFIG_IPSEC_NAT_TRAVERSAL) 	return 1; -#else+#else /* either CONFIG_XFRM or CONFIG_IPSEC_NAT_TRAVERSAL */ 	struct udp_sock *up = udp_sk(sk);   	struct udphdr *uh = skb->h.uh; 	struct iphdr *iph;@@ -915,11 +954,11 @@  	/* if we're overly short, let UDP handle it */ 	if (udpdata > skb->tail)-		return 1;+		return 2;  	/* if this is not encapsulated socket, then just return now */ 	if (!encap_type)-		return 1;+		return 3;  	len = skb->tail - udpdata; @@ -934,7 +973,7 @@ 			len = sizeof(struct udphdr); 		} else 			/* Must be an IKE packet.. pass it through */-			return 1;+			return 4; 		break; 	case UDP_ENCAP_ESPINUDP_NON_IKE: 		/* Check if this is a keepalive packet.  If so, eat it. */@@ -947,7 +986,7 @@ 			len = sizeof(struct udphdr) + 2 * sizeof(u32); 		} else 			/* Must be an IKE packet.. pass it through */-			return 1;+			return 5; 		break; 	} @@ -1021,10 +1060,14 @@ 			return 0; 		} 		if (ret < 0) {-			/* process the ESP packet */-			ret = xfrm4_rcv_encap(skb, up->encap_type);-			UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS);-			return -ret;+ 			if(xfrm4_rcv_encap_func != NULL) {+ 			  ret = (*xfrm4_rcv_encap_func)(skb, up->encap_type);+ 			  UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS);+ 			} else {+ 			  UDP_INC_STATS_BH(UDP_MIB_INERRORS);+ 			  ret = 1;+ 			}+			return ret; 		} 		/* FALLTHROUGH -- it's a UDP Packet */ 	}@@ -1114,7 +1157,6 @@ /*  *	All we need to do is get the socket, and then do a checksum.   */-  int udp_rcv(struct sk_buff *skb) {   	struct sock *sk;@@ -1571,3 +1613,9 @@ EXPORT_SYMBOL(udp_proc_register); EXPORT_SYMBOL(udp_proc_unregister); #endif++#if defined(CONFIG_IPSEC_NAT_TRAVERSAL)+EXPORT_SYMBOL(udp4_register_esp_rcvencap);+EXPORT_SYMBOL(udp4_unregister_esp_rcvencap);+#endif+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -