[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Problem installing Network Dispatcher Patch



Hi,

     I'm installing Network Dispatcher (IBM) over Linux Red Hat 6.1.
     To make it run, it is neccessary to apply one patch.

     The question is: Is there anybody who could tell me how apply this? 


Patch is like this:

--- linux/Documentation/networking/ip-sysctl.txt	Wed Dec  1 12:01:47
1999
+++ linux/Documentation/networking/ip-sysctl.txt	Wed Dec  1 14:03:14
1999
@@ -156,6 +156,9 @@
 proxy_arp - BOOLEAN
 	Do proxy arp.
 
+arp_invisible - BOOLEAN
+	Hide this interface and don't send ARP replies for it.
+
 shared_media - BOOLEAN
 	undocumented.
 
--- linux/Documentation/proc.txt	Wed Dec  1 12:01:47 1999
+++ linux/Documentation/proc.txt	Wed Dec  1 14:04:02 1999
@@ -1163,6 +1163,9 @@
 proxy_arp
    Do (1) or don't (0) do proxy ARP.
 
+arp_invisible
+   Hide this interface and don't send ARP replies for it.
+
 rp_filter
    Integer value deciding if source validation should be made. 
    1 means yes, 0 means no. Disabled by default, but 
--- linux/include/linux/inetdevice.h	Wed Dec  1 12:01:39 1999
+++ linux/include/linux/inetdevice.h	Wed Dec  1 13:44:18 1999
@@ -16,6 +16,7 @@
 	int	log_martians;
 	int	forwarding;
 	int	mc_forwarding;
+	int	arp_invisible;
 	void	*sysctl;
 };
 
@@ -40,6 +41,7 @@
 
 #define IN_DEV_LOG_MARTIANS(in_dev)	(ipv4_devconf.log_martians ||
(in_dev)->cnf.log_martians)
 #define IN_DEV_PROXY_ARP(in_dev)	(ipv4_devconf.proxy_arp ||
(in_dev)->cnf.proxy_arp)
+#define IN_DEV_ARP_INVISIBLE(in_dev)	(ipv4_devconf.arp_invisible ||
(in_dev)->cnf.arp_invisible)
 #define IN_DEV_SHARED_MEDIA(in_dev)	(ipv4_devconf.shared_media ||
(in_dev)->cnf.shared_media)
 #define IN_DEV_TX_REDIRECTS(in_dev)	(ipv4_devconf.send_redirects ||
(in_dev)->cnf.send_redirects)
 #define IN_DEV_SEC_REDIRECTS(in_dev)	(ipv4_devconf.secure_redirects ||
(in_dev)->cnf.secure_redirects)
--- linux/include/linux/sysctl.h	Wed Dec  1 12:01:40 1999
+++ linux/include/linux/sysctl.h	Wed Dec  1 13:45:35 1999
@@ -251,7 +251,8 @@
 	NET_IPV4_CONF_RP_FILTER=8,
 	NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9,
 	NET_IPV4_CONF_BOOTP_RELAY=10,
-	NET_IPV4_CONF_LOG_MARTIANS=11
+	NET_IPV4_CONF_LOG_MARTIANS=11,
+	NET_IPV4_CONF_ARP_INVISIBLE=12
 };
 
 /* /proc/sys/net/ipv6 */
--- linux/net/ipv4/arp.c	Wed Dec  1 12:02:32 1999
+++ linux/net/ipv4/arp.c	Wed Dec  1 15:58:22 1999
@@ -65,6 +65,8 @@
  *					clean up the APFDDI & gen. FDDI
bits.
  *		Alexey Kuznetsov:	new arp state machine;
  *					now it is in net/core/neighbour.c.
+ *		Julian Anastasov:	arp_invisible flag: hide the
+ *					interface and don't reply for it
  */
 
 /* RFC1122 Status:
@@ -302,14 +304,24 @@
 {
 	u32 saddr;
 	u8  *dst_ha = NULL;
-	struct device *dev = neigh->dev;
+        struct device *dev = neigh->dev;
+	struct device *dev2;
+	struct in_device *in_dev = NULL;
 	u32 target = *(u32*)neigh->primary_key;
 	int probes = neigh->probes;
 
-	if (skb && inet_addr_type(skb->nh.iph->saddr) == RTN_LOCAL)
+	if (skb && inet_addr_type(skb->nh.iph->saddr) == RTN_LOCAL) {
 		saddr = skb->nh.iph->saddr;
-	else
+                dev2 = ip_dev_find(saddr);
+                if (dev2) in_dev = (struct in_device *) dev2->ip_ptr;
+                if (in_dev && IN_DEV_ARP_INVISIBLE(in_dev)) {
+                        printk(KERN_INFO "%s: src ip=%d.%d.%d.%d is hidden,
will select another src ip\n", __FUNCTION__, NIPQUAD(saddr));
+                        in_dev = NULL;
+                }
+        }
+        if (!in_dev) {
 		saddr = inet_select_addr(dev, target, RT_SCOPE_LINK);
+        }
 
 	if ((probes -= neigh->parms->ucast_probes) < 0) {
 		if (!(neigh->nud_state&NUD_VALID))
@@ -537,6 +549,8 @@
 	u16 dev_type = dev->type;
 	int addr_type;
 	struct in_device *in_dev = dev->ip_ptr;
+	struct in_device *in_dev2;
+	struct device *tdev;
 	struct neighbour *n;
 
 /*
@@ -649,8 +663,17 @@
 	/* Special case: IPv4 duplicate address detection packet (RFC2131)
*/
 	if (sip == 0) {
 		if (arp->ar_op == __constant_htons(ARPOP_REQUEST) &&
-		    inet_addr_type(tip) == RTN_LOCAL)
-
arp_send(ARPOP_REPLY,ETH_P_ARP,tip,dev,tip,sha,dev->dev_addr,dev->dev_addr);
+		    inet_addr_type(tip) == RTN_LOCAL) {
+                        in_dev2 = NULL;
+                        tdev = ip_dev_find(tip);
+                        if (tdev) in_dev2 = (struct in_device *)
tdev->ip_ptr;
+			/*
+			 * In fact, we allow remote host to use this IP
+			 * if our interface is "hidden"
+			 */
+			if (in_dev2 && !IN_DEV_ARP_INVISIBLE(in_dev2))
+
arp_send(ARPOP_REPLY,ETH_P_ARP,tip,dev,tip,sha,dev->dev_addr,dev->dev_addr);
+		}
 		goto out;
 	}
 
@@ -663,7 +686,14 @@
 		if (addr_type == RTN_LOCAL) {
 			n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
 			if (n) {
-
arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
+				in_dev2 = NULL;
+				tdev = ip_dev_find(tip);
+				if (tdev) in_dev2 = (struct in_device *)
tdev->ip_ptr;
+				if (in_dev2 &&
IN_DEV_ARP_INVISIBLE(in_dev2)) {
+					printk(KERN_INFO "%s: Skipping
answer for hidden IP %d.%d.%d.%d\n", __FUNCTION__, NIPQUAD(tip));
+				}
+				if (in_dev2 &&
!IN_DEV_ARP_INVISIBLE(in_dev2))
+
arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
 				neigh_release(n);
 			}
 			goto out;
--- linux/net/ipv4/devinet.c	Wed Dec  1 12:02:32 1999
+++ linux/net/ipv4/devinet.c	Wed Dec  1 14:02:19 1999
@@ -914,7 +914,7 @@
 static struct devinet_sysctl_table
 {
 	struct ctl_table_header *sysctl_header;
-	ctl_table devinet_vars[12];
+	ctl_table devinet_vars[13];
 	ctl_table devinet_dev[2];
 	ctl_table devinet_conf_dir[2];
 	ctl_table devinet_proto_dir[2];
@@ -947,6 +947,9 @@
          &proc_dointvec},
 	{NET_IPV4_CONF_PROXY_ARP, "proxy_arp",
          &ipv4_devconf.proxy_arp, sizeof(int), 0644, NULL,
+         &proc_dointvec},
+	{NET_IPV4_CONF_ARP_INVISIBLE, "arp_invisible",
+         &ipv4_devconf.arp_invisible, sizeof(int), 0644, NULL,
          &proc_dointvec},
 	{NET_IPV4_CONF_BOOTP_RELAY, "bootp_relay",
          &ipv4_devconf.bootp_relay, sizeof(int), 0644, NULL,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]