Article delegate-en/4030 of [1-5169] on the server localhost:119
  upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
Newsgroups: mail-lists.delegate-en

[DeleGate-En] Re: Use the same outgoing IP address as the incoming IP address
30 Jul 2008 22:50:09 GMT (Yutaka Sato)
The DeleGate Project

In message <_A4029@delegate-en.ML_> on 07/31/08(06:22:55)
you Sorin Esanu <> wrote:
 |Those 3 ips have different routes to world wide internet. So the 
 |application program does not have to select anything in respect to 
 |routes to destination servers. This is done by the hardware that route 
 |those ip addresses.
 |Anyway, I am aware that I can start 3 different DeleGate with different 
 |SRCIF, but that is waist of resources. What if I have 100 ips and I want 
 |to do that...

Wow, do you really have such number of interfaces on a machine?

 |All I need is a simple way of telling DeleGate to automatically use to 
 |connect to final destination the ip that the original request came on. I 
 |need to keep things apart, but with the minimum effort...

With the enclosed patch, you can use the following options to bind
the source address of an outgoing connection to the address of
incomming port of the session.

  SRCIF=clif.-    ... bind the source address to the client-side interface

  SRCIF=dontroute.clif.-   ... and set the SO_DONTROUTE option

I confirmed the patch adds the behavior described above, but I don't
know if or not this is useful for source routing.

  9 9   Yutaka Sato <>
 ( ~ )  National Institute of Advanced Industrial Science and Technology
_<   >_ 1-1-4 Umezono, Tsukuba, Ibaraki, 305-8568 Japan
Do the more with the less -- B. Fuller

*** dist/src/delegate9.8.4-pre2/src/inets.c	Mon Jul 14 14:40:43 2008
--- inets.c	Thu Jul 31 07:35:01 2008
*** 2038,2043 ****
--- 2038,2061 ----
+ 	if( strtailstr(SRCHOST,"clif.-") ){
+ 		const char *CTX_clif_host(DGC*Conn);
+ 		const char *clif;
+ 		DGC *MainConn();
+ 		int on = 1;
+ 		int rcode;
+ 		clif = CTX_clif_host(MainConn());
+ 		VSA_atosa(&Vaddr,0,gethostaddr(clif));
+ 		bind_inets(sock,&Vaddr,0,SRCPORT);
+ 		gethostName(sock,AVStr(sockname),"%A:%P");
+ 		sv1log("[%d] source port = %s:%d = %s\n",sock,clif,SRCPORT,sockname);
+ 		if( streq(SRCHOST,"dontroute.clif.-") ){
+ 			rcode = SETsockopt(sock,SOL_SOCKET,SO_DONTROUTE,&on,sizeof(on));
+ 			sv1log("#### [%s] dontroute = %d\n",clif,rcode);
+ 		}
+ 		return;
+ 	}
  	if( *SRCHOST )
  	else	VSA_atosa(&Vaddr,0,"");

  admin search upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]