Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Jul 2002 13:09:54 -0700 (PDT)
From:      Masanori Takeishi <marina@yaya.forks.co.jp>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/40617: /usr/sbin/ppp is not able to bind the natd(8) -alias_address option.
Message-ID:  <200207152009.g6FK9sVd078199@www.freebsd.org>

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

>Number:         40617
>Category:       bin
>Synopsis:       /usr/sbin/ppp is not able to bind the natd(8) -alias_address option.
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul 15 13:10:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Masanori Takeishi
>Release:        FreeBSD 4.6-STABLE
>Organization:
Forks Inc.
>Environment:
FreeBSD **.***.jp 4.6-STABLE FreeBSD 4.6-STABLE #0: Mon Jul 15 02:21:45
 JST 2002     marina@**.***.jp:/usr/obj/usr/src/sys/IX  i386
      
>Description:
When several providers is make unnumberd PPPoE conect the allocation address for a network address.
if Allocation area is x.x.x.0/28
My Side: IP = x.x.x.0 !! too BAD!! 
>How-To-Repeat:
Present condition becomes so

>Fix:
/usr/sbin/ppp is able to bind the natd(8) -alias_address option.

sample ppp.conf:
+ nat alias x.x.x.1

patch:
diff -urN ppp.org/command.c ppp/command.c
--- ppp.org/command.c   Sat Jun  8 15:37:48 2002
+++ ppp/command.c       Sat Jun  8 15:30:32 2002
@@ -641,6 +641,8 @@
    (const void *) PKT_ALIAS_SAME_PORTS},
   {"target", NULL, nat_SetTarget, LOCAL_AUTH,
    "Default address for incoming connections", "nat target addr" },
+  {"alias", NULL, nat_SetAlias, LOCAL_AUTH,
+   "Use addr as the aliasing address", "nat alias addr" },
   {"unregistered_only", NULL, NatOption, LOCAL_AUTH,
    "translate unregistered (private) IP address space only",
    "nat unregistered_only yes|no",
@@ -2371,6 +2373,8 @@
   return 0;
 }

+extern struct in_addr alias_address_addr;
+
 #ifndef NONAT
 static int
 NatEnable(struct cmdargs const *arg)
@@ -2378,8 +2382,12 @@
   if (arg->argc == arg->argn+1) {
     if (strcasecmp(arg->argv[arg->argn], "yes") == 0) {
       if (!arg->bundle->NatEnabled) {
-        if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED)
-          PacketAliasSetAddress(arg->bundle->ncp.ipcp.my_ip);
+        if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED){
+          if (alias_address_addr.s_addr == INADDR_NONE || alias_address_addr.s_
addr == 0)
+            PacketAliasSetAddress(arg->bundle->ncp.ipcp.my_ip);
+         else
+            PacketAliasSetAddress(alias_address_addr);
+        }
         arg->bundle->NatEnabled = 1;
       }
       return 0;
diff -urN ppp.org/ipcp.c ppp/ipcp.c
--- ppp.org/ipcp.c      Sat Jun  8 15:37:48 2002
+++ ppp/ipcp.c  Sat Jun  8 15:30:32 2002
@@ -991,6 +991,8 @@
   recursing--;
 }

+extern struct in_addr alias_address_addr;
+
 int
 ipcp_InterfaceUp(struct ipcp *ipcp)
 {
@@ -1006,8 +1008,12 @@
   }

 #ifndef NONAT
-  if (ipcp->fsm.bundle->NatEnabled)
-    PacketAliasSetAddress(ipcp->my_ip);
+  if (ipcp->fsm.bundle->NatEnabled) {
+    if (alias_address_addr.s_addr == INADDR_NONE || alias_address_addr.s_addr =
= 0)
+      PacketAliasSetAddress(ipcp->my_ip);
+    else
+      PacketAliasSetAddress(alias_address_addr);
+  }
 #endif

   return 1;
diff -urN ppp.org/nat_cmd.c ppp/nat_cmd.c
--- ppp.org/nat_cmd.c   Sat Jun  8 15:37:49 2002
+++ ppp/nat_cmd.c       Sat Jun  8 16:43:01 2002
@@ -435,6 +435,30 @@
   return 0;
 }

+struct in_addr alias_address_addr;
+
+int
+nat_SetAlias(struct cmdargs const *arg)
+{
+  if (arg->argc != arg->argn + 1)
+    return -1;
+
+  if (!strcasecmp(arg->argv[arg->argn], "MYADDR")) {
+    alias_address_addr.s_addr = INADDR_ANY;
+    PacketAliasSetAddress(alias_address_addr);
+    return 0;
+  }
+
+  alias_address_addr = GetIpAddr(arg->argv[arg->argn]);
+  if (alias_address_addr.s_addr == INADDR_NONE) {
+    log_Printf(LogWARN, "%s: invalid address\n", arg->argv[arg->argn]);
+    return 1;
+  }
+
+  PacketAliasSetAddress(alias_address_addr);
+  return 0;
+}
+
 static struct mbuf *
 nat_LayerPush(struct bundle *bundle, struct link *l, struct mbuf *bp,
                 int pri, u_short *proto)
diff -urN ppp.org/nat_cmd.h ppp/nat_cmd.h
--- ppp.org/nat_cmd.h   Sat Jun  8 15:37:49 2002
+++ ppp/nat_cmd.h       Sat Jun  8 13:58:20 2002
@@ -34,5 +34,6 @@
 extern int nat_RedirectProto(struct cmdargs const *);
 extern int nat_ProxyRule(struct cmdargs const *);
 extern int nat_SetTarget(struct cmdargs const *);
+extern int nat_SetAlias(struct cmdargs const *);

 extern struct layer natlayer;

>Release-Note:
>Audit-Trail:
>Unformatted:

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




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