summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Elischer <julian@FreeBSD.org>2008-07-24 17:39:51 +0000
committerJulian Elischer <julian@FreeBSD.org>2008-07-24 17:39:51 +0000
commite0249e19efc06da9e66ba319ea3769eb95bca9c7 (patch)
treec084037b4ec2320b7b6036830329b03ce8e05a7e
parent174cbff88a5ff92ce964d9bb1a7748da58b224d5 (diff)
Notes
-rw-r--r--UPDATING7
-rw-r--r--lib/libc/sys/Makefile.inc4
-rw-r--r--lib/libc/sys/setfib.279
-rw-r--r--sbin/ipfw/ipfw2.c16
4 files changed, 104 insertions, 2 deletions
diff --git a/UPDATING b/UPDATING
index 426c4c7f3ffa..f5222a7922b3 100644
--- a/UPDATING
+++ b/UPDATING
@@ -8,6 +8,13 @@ Items affecting the ports and packages system can be found in
/usr/ports/UPDATING. Please read that file before running
portupgrade.
+20080724:
+ I have MFC'd in code to support multiple routing tables.
+ see the man pages setfib(1) and setfib(2).
+ This is a backwards compatible version,
+ but to make use of it you need to compile your kernel
+ with options ROUTETABLES=2 (or more up to 16).
+
20080226:
FreeBSD 7.0-RELEASE
diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc
index a4c8f0038230..2c4aafcdd190 100644
--- a/lib/libc/sys/Makefile.inc
+++ b/lib/libc/sys/Makefile.inc
@@ -83,8 +83,8 @@ MAN+= _exit.2 abort2.2 accept.2 access.2 acct.2 adjtime.2 \
nfssvc.2 open.2 pathconf.2 pipe.2 poll.2 profil.2 ptrace.2 quotactl.2 \
read.2 readlink.2 reboot.2 recv.2 rename.2 revoke.2 rfork.2 rmdir.2 \
rtprio.2 select.2 semctl.2 semget.2 semop.2 send.2 sendfile.2 \
- setgroups.2 setpgid.2 setregid.2 setresuid.2 setreuid.2 setsid.2 \
- setuid.2 shmat.2 shmctl.2 shmget.2 shutdown.2 \
+ setfib.2 setgroups.2 setpgid.2 setregid.2 setresuid.2 setreuid.2 \
+ setsid.2 setuid.2 shmat.2 shmctl.2 shmget.2 shutdown.2 \
sigaction.2 sigaltstack.2 sigpending.2 sigprocmask.2 sigqueue.2 \
sigreturn.2 sigstack.2 sigsuspend.2 sigwait.2 sigwaitinfo.2 \
socket.2 socketpair.2 stat.2 statfs.2 \
diff --git a/lib/libc/sys/setfib.2 b/lib/libc/sys/setfib.2
new file mode 100644
index 000000000000..e27221c50512
--- /dev/null
+++ b/lib/libc/sys/setfib.2
@@ -0,0 +1,79 @@
+.\" Copyright (c) 2008 Cisco Systems. All rights reserved.
+.\" Author: Julian Elischer
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Neither the name of the Cisco Systems nor the names of its employees
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd May 9, 2008
+.Dt SETFIB 2
+.Os
+.Sh NAME
+.Nm setfib
+.Nd set the default FIB (routing table) for the calling process.
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.Ft int
+.Fn setfib "int fib"
+.Sh DESCRIPTION
+The
+.Fn setfib
+system call sets the associated fib for all sockets opened
+subsequent to the call, to be that of the argument
+.Fa fib .
+The
+.Fa fib
+argument
+may be between 0 and the current system maximum which
+may be retrieved by the
+.Em net.fibs
+sysctl.
+The default fib of the process will be applied to all protocol families
+that support multiple fibs, and ignored by those that do not.
+The default fib for a process may be overidden for a socket with the use
+of the SO_SETFIB socket option.
+.Sh RETURN VALUES
+.Rv -std setfib
+.Sh ERRORS
+The
+.Fn kill
+system call
+will fail and no action will be taken and return
+.Er EINVAL
+if the
+.Fa fib
+argument is greater than the current system maximum.
+.El
+.Sh SEE ALSO
+.Xr setsockopt 2 ,
+.Xr setfib 8
+.Sh STANDARDS
+The
+.Fn setfib
+system call is a FreeBSD extension however similar extensions
+have been added to many other UNIX style kernels.
+.Sh HISTORY
+The
+.Fn setfib
+function appeared in
+.Fx 8.0 .
diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c
index 9e70893b99c5..30a67a86c938 100644
--- a/sbin/ipfw/ipfw2.c
+++ b/sbin/ipfw/ipfw2.c
@@ -4878,6 +4878,7 @@ add(int ac, char *av[])
action->opcode = O_NAT;
action->len = F_INSN_SIZE(ipfw_insn_nat);
goto chkarg;
+
case TOK_QUEUE:
action->opcode = O_QUEUE;
goto chkarg;
@@ -4960,6 +4961,21 @@ chkarg:
ac++; av--; /* go back... */
break;
+ case TOK_SETFIB:
+ {
+ int numfibs;
+
+ action->opcode = O_SETFIB;
+ NEED1("missing fib number");
+ action->arg1 = strtoul(*av, NULL, 10);
+ if (sysctlbyname("net.fibs", &numfibs, &i, NULL, 0) == -1)
+ errx(EX_DATAERR, "fibs not suported.\n");
+ if (action->arg1 >= numfibs) /* Temporary */
+ errx(EX_DATAERR, "fib too large.\n");
+ ac--; av++;
+ break;
+ }
+
default:
errx(EX_DATAERR, "invalid action %s\n", av[-1]);
}