summaryrefslogtreecommitdiff
path: root/sys/netinet/ip_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/ip_output.c')
-rw-r--r--sys/netinet/ip_output.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index fc8ebc17d1d..8dca59f9b4d 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_output.c,v 1.208 2010/07/02 02:40:16 blambert Exp $ */
+/* $OpenBSD: ip_output.c,v 1.209 2010/07/03 04:44:51 guenther Exp $ */
/* $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $ */
/*
@@ -1162,7 +1162,7 @@ ip_ctloutput(op, so, level, optname, mp)
case IP_ADD_MEMBERSHIP:
case IP_DROP_MEMBERSHIP:
error = ip_setmoptions(optname, &inp->inp_moptions, m,
- inp->inp_rdomain);
+ inp->inp_rtableid);
break;
case IP_PORTRANGE:
@@ -1426,24 +1426,23 @@ ip_ctloutput(op, so, level, optname, mp)
}
#endif
break;
- case SO_RDOMAIN:
+ case SO_RTABLE:
if (m == NULL || m->m_len < sizeof(u_int)) {
error = EINVAL;
break;
}
rtid = *mtod(m, u_int *);
- if (p->p_p->ps_rdomain != 0 &&
- p->p_p->ps_rdomain != rtid &&
- (error = suser(p, 0)) != 0) {
+ /* needs priviledges to switch when already set */
+ if (p->p_p->ps_rtableid != 0 && suser(p, 0) != 0) {
error = EACCES;
break;
}
- /* table must exist and be a domain */
- if (!rtable_exists(rtid) || rtid != rtable_l2(rtid)) {
+ /* table must exist */
+ if (!rtable_exists(rtid)) {
error = EINVAL;
break;
}
- inp->inp_rdomain = rtid;
+ inp->inp_rtableid = rtid;
break;
default:
error = ENOPROTOOPT;
@@ -1638,10 +1637,10 @@ ip_ctloutput(op, so, level, optname, mp)
}
#endif
break;
- case SO_RDOMAIN:
+ case SO_RTABLE:
*mp = m = m_get(M_WAIT, MT_SOOPTS);
m->m_len = sizeof(u_int);
- *mtod(m, u_int *) = inp->inp_rdomain;
+ *mtod(m, u_int *) = inp->inp_rtableid;
break;
default:
error = ENOPROTOOPT;
@@ -1765,7 +1764,7 @@ bad:
*/
int
ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
- u_int rdomain)
+ u_int rtableid)
{
int error = 0;
u_char loop;
@@ -1822,7 +1821,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
* IP address. Find the interface and confirm that
* it supports multicasting.
*/
- INADDR_TO_IFP(addr, ifp, rdomain);
+ INADDR_TO_IFP(addr, ifp, rtableid);
if (ifp == NULL || (ifp->if_flags & IFF_MULTICAST) == 0) {
error = EADDRNOTAVAIL;
break;
@@ -1881,7 +1880,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
if (!(ro.ro_rt && ro.ro_rt->rt_ifp &&
(ro.ro_rt->rt_flags & RTF_UP)))
ro.ro_rt = rtalloc1(&ro.ro_dst, RT_REPORT,
- rdomain);
+ rtableid);
if (ro.ro_rt == NULL) {
error = EADDRNOTAVAIL;
break;
@@ -1889,7 +1888,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
ifp = ro.ro_rt->rt_ifp;
rtfree(ro.ro_rt);
} else {
- INADDR_TO_IFP(mreq->imr_interface, ifp, rdomain);
+ INADDR_TO_IFP(mreq->imr_interface, ifp, rtableid);
}
/*
* See if we found an interface, and confirm that it
@@ -1975,7 +1974,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
if (mreq->imr_interface.s_addr == INADDR_ANY)
ifp = NULL;
else {
- INADDR_TO_IFP(mreq->imr_interface, ifp, rdomain);
+ INADDR_TO_IFP(mreq->imr_interface, ifp, rtableid);
if (ifp == NULL) {
error = EADDRNOTAVAIL;
break;