Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Mar 2001 11:29:15 +0200
From:      Eugene Polovnikov <paranoid@brain-fag.org>
To:        net@freebsd.org, current@freebsd.org
Subject:   nos-tun & multihomed machines
Message-ID:  <20010316112914.A50671@zssm.zp.ua>

next in thread | raw e-mail | index | archive | help

--OXfL5xGRrasGEqWY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

hi!

Please, review the following PR: 
http://www.freebsd.org/cgi/query-pr.cgi?pr=25847

Same patch is in the attach.

-- 
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/CC/IT d-@ s: a- C++ UBSC++++$ P++>+++@ L- E--- W+ N++ o? K? w>-- O- M- V-
PS@ PE@ Y+ PGP>+ t 5 X R tv- b+++(++++) DI-- D+(++) G>++ e- h--- r y+++
------END GEEK CODE BLOCK------

--OXfL5xGRrasGEqWY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=p

--- nos-tun.c.orig	Fri Mar 16 11:01:38 2001
+++ nos-tun.c	Fri Mar 16 11:17:35 2001
@@ -239,11 +239,13 @@
   char *point_to = NULL;
   char *to_point = NULL;
   char *target;
+  char *source = NULL;
   char *protocol = NULL;
   int protnum;
 
   struct sockaddr t_laddr;          /* Source address of tunnel */
   struct sockaddr whereto;          /* Destination of tunnel */
+  struct sockaddr wherefrom;        /* Source of tunnel */
   struct sockaddr_in *to;
 
   char buf[0x2000];                 /* Packets buffer */
@@ -272,7 +274,7 @@
   argc -= optind;
   argv += optind;
 
-  if (argc != 1 || (devname == NULL) ||
+  if ((argc != 1 && argc != 2) || (devname == NULL) ||
       (point_to == NULL) || (to_point == NULL)) {
     usage();
   }
@@ -282,7 +284,11 @@
   else
       protnum = atoi(protocol);
 
-  target = *argv;
+  if (argc == 1) {
+      target = *argv;
+  } else {
+      source = *argv++; target = *argv;
+  }
 
   /* Establish logging through 'syslog' */
   openlog("nos-tun", LOG_PID, LOG_DAEMON);
@@ -306,6 +312,15 @@
     Finish(5);
   }
 
+  if (source) { 
+	if (Set_address(source, (struct sockaddr_in *)&wherefrom))
+	  Finish(9);
+    if (bind(net, &wherefrom, sizeof(wherefrom)) < 0) {
+	  syslog(LOG_ERR, "can't bind source address - %m");
+	  Finish(10);
+	}
+  }
+
   if (connect(net,&whereto,sizeof(struct sockaddr_in)) < 0 ) {
     syslog(LOG_ERR,"can't connect to target - %m");
     close(net);
@@ -365,7 +380,7 @@
 usage()
 {
 	fprintf(stderr,
-"usage: nos-tun -t <tun_name> -s <source_addr> -d <dest_addr> -p <protocol_number> <target_addr>\n");
+"usage: nos-tun -t <tun_name> -s <source_addr> -d <dest_addr> -p <protocol_number> [<source_addr>] <target_addr>\n");
 	exit(1);
 }
 

--OXfL5xGRrasGEqWY--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010316112914.A50671>