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