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>