1*25202Skarels /* 2*25202Skarels * Copyright (c) 1982 Regents of the University of California. 3*25202Skarels * All rights reserved. The Berkeley software License Agreement 4*25202Skarels * specifies the terms and conditions for redistribution. 5*25202Skarels * 6*25202Skarels * @(#)in_var.h 6.2 (Berkeley) 6/8/85 7*25202Skarels */ 8*25202Skarels 9*25202Skarels /* 10*25202Skarels * Interface address, internet version. One of these structures 11*25202Skarels * is allocated for each interface with an internet address. 12*25202Skarels * The ifaddr structure contains the protocol-independent part 13*25202Skarels * of the structure and is assumed to be first. 14*25202Skarels */ 15*25202Skarels struct in_ifaddr { 16*25202Skarels struct ifaddr ia_ifa; /* protocol-independent info */ 17*25202Skarels #define ia_addr ia_ifa.ifa_addr 18*25202Skarels #define ia_broadaddr ia_ifa.ifa_broadaddr 19*25202Skarels #define ia_dstaddr ia_ifa.ifa_dstaddr 20*25202Skarels #define ia_ifp ia_ifa.ifa_ifp 21*25202Skarels u_long ia_net; /* network number of interface */ 22*25202Skarels u_long ia_netmask; /* mask of net part */ 23*25202Skarels u_long ia_subnet; /* subnet number, including net */ 24*25202Skarels u_long ia_subnetmask; /* mask of net + subnet */ 25*25202Skarels int ia_flags; 26*25202Skarels struct in_ifaddr *ia_next; /* next in list of internet addresses */ 27*25202Skarels }; 28*25202Skarels 29*25202Skarels /* 30*25202Skarels * Given a pointer to an in_ifaddr (ifaddr), 31*25202Skarels * return a pointer to the addr as a sockadd_in. 32*25202Skarels */ 33*25202Skarels #define IA_SIN(ia) ((struct sockaddr_in *)(&((struct in_ifaddr *)ia)->ia_addr)) 34*25202Skarels 35*25202Skarels #define IA_B_SIN(ia) ((struct sockaddr_in *)(&((struct in_ifaddr *)ia)->ia_broadaddr)) 36*25202Skarels 37*25202Skarels /* 38*25202Skarels * in_ifaddr to in_addr 39*25202Skarels */ 40*25202Skarels #define IA_INADDR(ia) (IA_SIN(ia)->sin_addr) 41*25202Skarels 42*25202Skarels #define IA_B_INADDR(ia) (IA_B_SIN(ia)->sin_addr) 43*25202Skarels 44*25202Skarels /* 45*25202Skarels * ia_flags 46*25202Skarels */ 47*25202Skarels #define IFA_ROUTE 0x01 /* routing entry installed */ 48*25202Skarels 49*25202Skarels /* 50*25202Skarels * protocol switch table built by IP at initialization time 51*25202Skarels */ 52*25202Skarels 53*25202Skarels struct ipswitch { 54*25202Skarels struct protosw *ipsw_user; /* for normal user packets passed up */ 55*25202Skarels struct protosw *ipsw_raw; /* for raw packets passed up */ 56*25202Skarels int ipsw_hlen; 57*25202Skarels }; 58*25202Skarels extern struct ipswitch ipsw[]; 59*25202Skarels 60*25202Skarels extern u_char inetctlerrmap[]; 61*25202Skarels 62*25202Skarels /* 63*25202Skarels * Internet protocol statistics structure (should be at the head 64*25202Skarels * of protocol dependent structures). 65*25202Skarels */ 66*25202Skarels 67*25202Skarels struct in_stat { 68*25202Skarels int in_total; /* total packets seen */ 69*25202Skarels int in_badsum; /* packets with bad cksums */ 70*25202Skarels int in_tooshort; /* bad sizes */ 71*25202Skarels int in_drops; /* packets no one (except raw) wanted */ 72*25202Skarels }; 73*25202Skarels 74*25202Skarels 75*25202Skarels #ifdef KERNEL 76*25202Skarels extern struct in_ifaddr *in_ifaddr; 77*25202Skarels 78*25202Skarels extern struct in_ifaddr *in_iawithaddr(); 79*25202Skarels extern struct in_ifaddr *in_iawithnet(); 80*25202Skarels extern struct in_ifaddr *in_iafromif(); 81*25202Skarels #endif 82