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>
index | next in thread | raw e-mail
>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
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200207152009.g6FK9sVd078199>
