projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
only delete space used by inode, on inode deletion; required
[unix-history]
/
usr
/
src
/
sys
/
netns
/
ns.c
diff --git
a/usr/src/sys/netns/ns.c
b/usr/src/sys/netns/ns.c
index
87b0a8a
..
f8350eb
100644
(file)
--- a/
usr/src/sys/netns/ns.c
+++ b/
usr/src/sys/netns/ns.c
@@
-4,16
+4,16
@@
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)ns.c 7.
7
(Berkeley) %G%
+ * @(#)ns.c 7.
11
(Berkeley) %G%
*/
#include "param.h"
#include "mbuf.h"
#include "ioctl.h"
#include "protosw.h"
*/
#include "param.h"
#include "mbuf.h"
#include "ioctl.h"
#include "protosw.h"
+#include "errno.h"
#include "socket.h"
#include "socketvar.h"
#include "socket.h"
#include "socketvar.h"
-#include "user.h"
#include "../net/if.h"
#include "../net/if.h"
@@
-44,7
+44,6
@@
ns_control(so, cmd, data, ifp)
register struct ns_ifaddr *ia;
struct ifaddr *ifa;
struct ns_ifaddr *oia;
register struct ns_ifaddr *ia;
struct ifaddr *ifa;
struct ns_ifaddr *oia;
- struct mbuf *m;
int error, dstIsNew, hostIsNew;
/*
int error, dstIsNew, hostIsNew;
/*
@@
-82,8
+81,8
@@
ns_control(so, cmd, data, ifp)
return (0);
}
return (0);
}
- if (
error = suser(u.u_cred, &u.u_acflag)
)
- return (
error
);
+ if (
(so->so_state & SS_PRIV) == 0
)
+ return (
EPERM
);
switch (cmd) {
case SIOCAIFADDR:
switch (cmd) {
case SIOCAIFADDR:
@@
-102,16
+101,18
@@
ns_control(so, cmd, data, ifp)
case SIOCSIFADDR:
case SIOCSIFDSTADDR:
if (ia == (struct ns_ifaddr *)0) {
case SIOCSIFADDR:
case SIOCSIFDSTADDR:
if (ia == (struct ns_ifaddr *)0) {
- m = m_getclr(M_WAIT, MT_IFADDR);
- if (m == (struct mbuf *)NULL)
+ oia = (struct ns_ifaddr *)
+ malloc(sizeof *ia, M_IFADDR, M_WAITOK);
+ if (oia == (struct ns_ifaddr *)NULL)
return (ENOBUFS);
return (ENOBUFS);
+ bzero((caddr_t)oia, sizeof(*oia));
if (ia = ns_ifaddr) {
for ( ; ia->ia_next; ia = ia->ia_next)
;
if (ia = ns_ifaddr) {
for ( ; ia->ia_next; ia = ia->ia_next)
;
- ia->ia_next =
mtod(m, struct ns_ifaddr *)
;
+ ia->ia_next =
oia
;
} else
} else
- ns_ifaddr =
mtod(m, struct ns_ifaddr *)
;
- ia =
mtod(m, struct ns_ifaddr *)
;
+ ns_ifaddr =
oia
;
+ ia =
oia
;
if (ifa = ifp->if_addrlist) {
for ( ; ifa->ifa_next; ifa = ifa->ifa_next)
;
if (ifa = ifp->if_addrlist) {
for ( ; ifa->ifa_next; ifa = ifa->ifa_next)
;
@@
-182,7
+183,7
@@
ns_control(so, cmd, data, ifp)
else
printf("Didn't unlink nsifadr from list\n");
}
else
printf("Didn't unlink nsifadr from list\n");
}
-
(void) m_free(dtom(oi
a));
+
IFAFREE((&oia->ia_if
a));
if (0 == --ns_interfaces) {
/*
* We reset to virginity and start all over again
if (0 == --ns_interfaces) {
/*
* We reset to virginity and start all over again
@@
-292,6
+293,7
@@
ns_ifinit(ifp, ia, sns, scrub)
splx(s);
return (EINVAL);
}
splx(s);
return (EINVAL);
}
+ ia->ia_ifa.ifa_metric = ifp->if_metric;
/*
* Add route for the network.
*/
/*
* Add route for the network.
*/