PERFORCE change 41603 for review

Sam Leffler sam at FreeBSD.org
Thu Nov 6 16:35:26 PST 2003


http://perforce.freebsd.org/chv.cgi?CH=41603

Change 41603 by sam at sam_ebb on 2003/11/06 16:35:10

	Add ICMP redirect handling to divert sockets.  It's not clear
	this is needed but it was simple so I did it.

Affected files ...

.. //depot/projects/netperf/sys/netinet/in_proto.c#5 edit
.. //depot/projects/netperf/sys/netinet/ip_divert.c#13 edit
.. //depot/projects/netperf/sys/netinet/ip_var.h#10 edit

Differences ...

==== //depot/projects/netperf/sys/netinet/in_proto.c#5 (text+ko) ====

@@ -206,7 +206,7 @@
 #endif
 #ifdef IPDIVERT
 { SOCK_RAW,	&inetdomain,	IPPROTO_DIVERT,	PR_ATOMIC|PR_ADDR,
-  div_input,	0,	 	0,		ip_ctloutput,
+  div_input,	0,	 	div_ctlinput,	ip_ctloutput,
   0,
   div_init,	0,		0,		0,
   &div_usrreqs,

==== //depot/projects/netperf/sys/netinet/ip_divert.c#13 (text+ko) ====

@@ -518,6 +518,21 @@
 	return div_output(so, m, (struct sockaddr_in *)nam, control);
 }
 
+void
+div_ctlinput(int cmd, struct sockaddr *sa, void *vip)
+{
+        struct in_addr faddr;
+
+	faddr = ((struct sockaddr_in *)sa)->sin_addr;
+	if (sa->sa_family != AF_INET || faddr.s_addr == INADDR_ANY)
+        	return;
+	if (PRC_IS_REDIRECT(cmd)) {
+		/* flush held routes */
+		in_pcbnotifyall(&divcbinfo, faddr,
+			inetctlerrmap[cmd], in_rtchange);
+	}
+}
+
 static int
 div_pcblist(SYSCTL_HANDLER_ARGS)
 {

==== //depot/projects/netperf/sys/netinet/ip_var.h#10 (text+ko) ====

@@ -203,6 +203,7 @@
 #ifdef IPDIVERT
 void	div_init(void);
 void	div_input(struct mbuf *, int);
+void	div_ctlinput(int, struct sockaddr *, void *);
 void	divert_packet(struct mbuf *m, int incoming, int port, int rule);
 extern struct pr_usrreqs div_usrreqs;
 #endif


More information about the p4-projects mailing list