[BACK]Return to if.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / bsd / dhcpcd / dist / src

Annotation of src/external/bsd/dhcpcd/dist/src/if.h, Revision 1.1.1.4.2.1

1.1       roy         1: /*
                      2:  * dhcpcd - DHCP client daemon
1.1.1.4   roy         3:  * Copyright (c) 2006-2018 Roy Marples <roy@marples.name>
1.1       roy         4:  * All rights reserved
                      5:
                      6:  * Redistribution and use in source and binary forms, with or without
                      7:  * modification, are permitted provided that the following conditions
                      8:  * are met:
                      9:  * 1. Redistributions of source code must retain the above copyright
                     10:  *    notice, this list of conditions and the following disclaimer.
                     11:  * 2. Redistributions in binary form must reproduce the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer in the
                     13:  *    documentation and/or other materials provided with the distribution.
                     14:  *
                     15:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     16:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     17:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     18:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     19:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     20:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     21:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     22:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     23:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     24:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     25:  * SUCH DAMAGE.
                     26:  */
                     27:
                     28: #ifndef INTERFACE_H
                     29: #define INTERFACE_H
                     30:
                     31: #include <net/if.h>
                     32: #include <net/route.h>         /* for RTM_ADD et all */
                     33: #include <netinet/in.h>
                     34: #ifdef BSD
                     35: #include <netinet/in_var.h>    /* for IN_IFF_TENTATIVE et all */
                     36: #endif
                     37:
1.1.1.4   roy        38: #include <ifaddrs.h>
                     39:
1.1       roy        40: /* Some systems have in-built IPv4 DAD.
                     41:  * However, we need them to do DAD at carrier up as well. */
                     42: #ifdef IN_IFF_TENTATIVE
                     43: #  ifdef __NetBSD__
                     44: #    define NOCARRIER_PRESERVE_IP
                     45: #  endif
                     46: #endif
                     47:
                     48: /*
                     49:  * Systems which handle 1 address per alias.
                     50:  * Currenly this is just Solaris.
                     51:  * While Linux can do aliased addresses, it is only useful for their
                     52:  * legacy ifconfig(8) tool which cannot display >1 IPv4 address
                     53:  * (it can display many IPv6 addresses which makes the limitation odd).
                     54:  * Linux has ip(8) which is a more feature rich tool, without the above
                     55:  * restriction.
                     56:  */
                     57: #ifndef ALIAS_ADDR
                     58: #  ifdef __sun
                     59: #    define ALIAS_ADDR
                     60: #  endif
                     61: #endif
                     62:
                     63: #include "config.h"
                     64: #include "dhcpcd.h"
                     65: #include "ipv4.h"
                     66: #include "ipv6.h"
                     67: #include "route.h"
                     68:
                     69: #define EUI64_ADDR_LEN                 8
                     70: #define INFINIBAND_ADDR_LEN            20
                     71:
                     72: /* Linux 2.4 doesn't define this */
                     73: #ifndef ARPHRD_IEEE1394
                     74: #  define ARPHRD_IEEE1394              24
                     75: #endif
                     76:
                     77: /* The BSD's don't define this yet */
                     78: #ifndef ARPHRD_INFINIBAND
                     79: #  define ARPHRD_INFINIBAND            32
                     80: #endif
                     81:
                     82: /* Work out if we have a private address or not
                     83:  * 10/8
                     84:  * 172.16/12
                     85:  * 192.168/16
                     86:  */
                     87: #ifndef IN_PRIVATE
                     88: # define IN_PRIVATE(addr) (((addr & IN_CLASSA_NET) == 0x0a000000) ||         \
                     89:            ((addr & 0xfff00000)    == 0xac100000) ||                         \
                     90:            ((addr & IN_CLASSB_NET) == 0xc0a80000))
                     91: #endif
                     92:
                     93: #define RAW_EOF                        1 << 0
                     94: #define RAW_PARTIALCSUM                2 << 0
                     95:
                     96: #ifndef CLLADDR
                     97: #ifdef AF_LINK
                     98: #  define CLLADDR(sdl) (const void *)((sdl)->sdl_data + (sdl)->sdl_nlen)
                     99: #endif
                    100: #endif
                    101:
                    102: #ifdef __sun
                    103: /* Solaris stupidly defines this for compat with BSD
                    104:  * but then ignores it. */
                    105: #undef RTF_CLONING
                    106:
                    107: /* Solaris getifaddrs is very un-suitable for dhcpcd.
                    108:  * See if-sun.c for details why. */
                    109: struct ifaddrs;
                    110: int if_getifaddrs(struct ifaddrs **);
                    111: #define        getifaddrs      if_getifaddrs
                    112: #endif
                    113:
                    114: int if_setflag(struct interface *ifp, short flag);
                    115: #define if_up(ifp) if_setflag((ifp), (IFF_UP | IFF_RUNNING))
1.1.1.3   roy       116: bool if_valid_hwaddr(const uint8_t *, size_t);
1.1.1.4   roy       117: struct if_head *if_discover(struct dhcpcd_ctx *, struct ifaddrs **,
                    118:     int, char * const *);
1.1.1.4.2.1! pgoyette  119: void if_markaddrsstale(struct if_head *);
1.1.1.4   roy       120: void if_learnaddrs(struct dhcpcd_ctx *, struct if_head *, struct ifaddrs **);
1.1.1.4.2.1! pgoyette  121: void if_deletestaleaddrs(struct if_head *);
1.1       roy       122: struct interface *if_find(struct if_head *, const char *);
                    123: struct interface *if_findindex(struct if_head *, unsigned int);
                    124: struct interface *if_loopback(struct dhcpcd_ctx *);
                    125: void if_sortinterfaces(struct dhcpcd_ctx *);
                    126: void if_free(struct interface *);
                    127: int if_domtu(const struct interface *, short int);
                    128: #define if_getmtu(ifp) if_domtu((ifp), 0)
                    129: #define if_setmtu(ifp, mtu) if_domtu((ifp), (mtu))
                    130: int if_carrier(struct interface *);
                    131:
                    132: /*
                    133:  * Helper to decode an interface name of bge0:1 to
                    134:  * devname = bge0, drvname = bge0, ppa = 0, lun = 1.
                    135:  * If ppa or lun are invalid they are set to -1.
                    136:  */
                    137: struct if_spec {
                    138:        char ifname[IF_NAMESIZE];
                    139:        char devname[IF_NAMESIZE];
                    140:        char drvname[IF_NAMESIZE];
                    141:        int ppa;
                    142:        int lun;
                    143: };
                    144: int if_nametospec(const char *, struct if_spec *);
                    145:
                    146: /* The below functions are provided by if-KERNEL.c */
                    147: int if_conf(struct interface *);
                    148: int if_init(struct interface *);
                    149: int if_getssid(struct interface *);
                    150: int if_vimaster(const struct dhcpcd_ctx *ctx, const char *);
1.1.1.2   roy       151: unsigned short if_vlanid(const struct interface *);
1.1       roy       152: int if_opensockets(struct dhcpcd_ctx *);
                    153: int if_opensockets_os(struct dhcpcd_ctx *);
                    154: void if_closesockets(struct dhcpcd_ctx *);
                    155: void if_closesockets_os(struct dhcpcd_ctx *);
                    156: int if_handlelink(struct dhcpcd_ctx *);
                    157:
                    158: /* dhcpcd uses the same routing flags as BSD.
                    159:  * If the platform doesn't use these flags,
                    160:  * map them in the platform interace file. */
                    161: #ifndef RTM_ADD
                    162: #define RTM_ADD                0x1     /* Add Route */
                    163: #define RTM_DELETE     0x2     /* Delete Route */
                    164: #define RTM_CHANGE     0x3     /* Change Metrics or flags */
                    165: #define RTM_GET                0x4     /* Report Metrics */
                    166: #endif
                    167:
                    168: /* Define SOCK_CLOEXEC and SOCK_NONBLOCK for systems that lack it.
                    169:  * xsocket() in if.c will map them to fctnl FD_CLOEXEC and O_NONBLOCK. */
                    170: #ifdef SOCK_CLOEXEC
                    171: # define HAVE_SOCK_CLOEXEC
                    172: #else
                    173: # define SOCK_CLOEXEC  0x10000000
                    174: #endif
                    175: #ifdef SOCK_NONBLOCK
                    176: # define HAVE_SOCK_NONBLOCK
                    177: #else
                    178: # define SOCK_NONBLOCK 0x20000000
                    179: #endif
                    180:
                    181: int if_route(unsigned char, const struct rt *rt);
                    182: int if_initrt(struct dhcpcd_ctx *, int);
                    183:
                    184: #ifdef INET
                    185: int if_address(unsigned char, const struct ipv4_addr *);
                    186: int if_addrflags(const struct interface *, const struct in_addr *,
                    187:     const char *);
                    188:
                    189: #endif
                    190:
                    191: #ifdef INET6
1.1.1.4.2.1! pgoyette  192: void if_setup_inet6(const struct interface *);
1.1       roy       193: #ifdef IPV6_MANAGETEMPADDR
                    194: int ip6_use_tempaddr(const char *ifname);
                    195: int ip6_temp_preferred_lifetime(const char *ifname);
                    196: int ip6_temp_valid_lifetime(const char *ifname);
                    197: #else
                    198: #define ip6_use_tempaddr(a) (0)
                    199: #endif
                    200:
                    201: int if_address6(unsigned char, const struct ipv6_addr *);
                    202: int if_addrflags6(const struct interface *, const struct in6_addr *,
                    203:     const char *);
                    204: int if_getlifetime6(struct ipv6_addr *);
                    205:
                    206: #else
                    207: #define if_checkipv6(a, b, c) (-1)
                    208: #endif
                    209:
                    210: int if_machinearch(char *, size_t);
                    211: int xsocket(int, int, int);
                    212: #endif

CVSweb <webmaster@jp.NetBSD.org>