Deleted Added
sdiff udiff text old ( 102574 ) new ( 113067 )
full compact
1/*-
2 * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/usr.sbin/ppp/iface.c 102574 2002-08-29 12:52:28Z sobomax $
27 */
28
29#include <sys/param.h>
30#include <sys/socket.h>
31#include <netinet/in.h>
32#include <net/if.h>
33#include <net/if_dl.h>
34#ifdef __FreeBSD__

--- 43 unchanged lines hidden (view full) ---

78#include "radius.h"
79#endif
80#include "ipv6cp.h"
81#include "ncp.h"
82#include "bundle.h"
83#include "prompt.h"
84#include "iface.h"
85
86
87struct iface *
88iface_Create(const char *name)
89{
90 int mib[6], maxtries, err;
91 size_t needed, namelen;
92 char *buf, *ptr, *end;
93 struct if_msghdr *ifm;
94 struct ifa_msghdr *ifam;

--- 233 unchanged lines hidden (view full) ---

328 case AF_INET6:
329 memset(&ifra6, '\0', sizeof ifra6);
330 strncpy(ifra6.ifra_name, name, sizeof ifra6.ifra_name - 1);
331
332 memcpy(&ifra6.ifra_addr, &ssme, sizeof ifra6.ifra_addr);
333 memcpy(&ifra6.ifra_prefixmask, &ssmsk, sizeof ifra6.ifra_prefixmask);
334 if (ncpaddr_family(&addr->peer) == AF_UNSPEC)
335 ifra6.ifra_dstaddr.sin6_family = AF_UNSPEC;
336 else
337 memcpy(&ifra6.ifra_dstaddr, &sspeer, sizeof ifra6.ifra_dstaddr);
338 ifra6.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME;
339 ifra6.ifra_lifetime.ia6t_pltime = ND6_INFINITE_LIFETIME;
340
341 res = ID0ioctl(s, SIOCAIFADDR_IN6, &ifra6);
342 break;
343#endif
344 }

--- 76 unchanged lines hidden (view full) ---

421 close(s6);
422 }
423}
424
425int
426iface_Add(struct iface *iface, struct ncp *ncp, const struct ncprange *ifa,
427 const struct ncpaddr *peer, int how)
428{
429 int af, n, removed, s, width;
430 struct ncpaddr ncplocal;
431 struct iface_addr *addr, newaddr;
432
433 af = ncprange_family(ifa);
434 if ((s = ID0socket(af, SOCK_DGRAM, 0)) == -1) {
435 log_Printf(LogERROR, "iface_Add: socket(): %s\n", strerror(errno));
436 return 0;
437 }

--- 9 unchanged lines hidden (view full) ---

447 }
448
449 if (ncprange_equal(&iface->addr[n].ifa, ifa) &&
450 ncpaddr_equal(&iface->addr[n].peer, peer)) {
451 close(s);
452 return 1; /* Already there */
453 }
454
455 width =
456#ifndef NOINET6
457 (af == AF_INET6) ? 128 :
458#endif
459 32;
460 removed = iface_addr_Zap(iface->name, iface->addr + n, s);
461 if (removed)
462 ncp_IfaceAddrDeleted(ncp, iface->addr + n);
463 ncprange_copy(&iface->addr[n].ifa, ifa);
464 ncpaddr_copy(&iface->addr[n].peer, peer);
465 if (!iface_addr_Add(iface->name, iface->addr + n, s)) {
466 if (removed) {
467 bcopy(iface->addr + n + 1, iface->addr + n,

--- 252 unchanged lines hidden ---