1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _INTERFACES_H 27 #define _INTERFACES_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #define DSRVR_NUM_DESC 3 /* Number of socket descriptors */ 34 typedef enum { 35 DSRVR_LBCAST = 0, /* Limited broadcast recv descriptor */ 36 DSRVR_DBCAST = 1, /* Directed broadcast recv descriptor */ 37 DSRVR_UCAST = 2 /* Unicast send/recv descriptor */ 38 } dsrvr_socktype_t; 39 40 typedef struct interfaces { 41 char nm[IFNAMSIZ]; /* Interface name */ 42 unsigned int ifceno; /* Interface index */ 43 short mtu; /* MTU of interface */ 44 int descs[DSRVR_NUM_DESC]; /* recv/send sockets */ 45 uint_t flags; /* interface flags */ 46 struct in_addr bcast; /* interface broadcast */ 47 struct in_addr mask; /* interface netmask */ 48 struct in_addr addr; /* interface IP addr */ 49 ENCODE *ecp; /* IF specific options */ 50 uint_t transmit; /* # of transmitted pkts */ 51 uint_t received; /* # of received pkts */ 52 uint_t duplicate; /* # of duplicate pkts */ 53 uint_t dropped; /* # of dropped pkts */ 54 uint_t expired; /* # of expired pkts */ 55 uint_t errors; /* # of protocol errors */ 56 uint_t processed; /* # of processed pkts */ 57 uint_t offers; /* # of pending offers */ 58 thread_t if_thread; /* rcv service thread */ 59 int thr_exit; /* sent when time to exit */ 60 mutex_t ifp_mtx; /* mutex lock on this struct */ 61 struct interfaces *next; 62 } IF; 63 64 #define DHCP_MON_SYSERRS 30 /* Max allowable interface errors */ 65 #define DHCP_MON_ERRINTVL 1 /* Time interval for IF errors (secs) */ 66 #define DHCP_MON_THRESHOLD 6 /* Max allowable pending pkts pcd */ 67 68 /* 69 * Pause interval (mins) if IF error threshold reached. 70 */ 71 #define DHCP_MON_SLEEP 5 72 73 extern IF *if_head; /* head of monitored interfaces */ 74 extern mutex_t if_head_mtx; /* lock to protect interfaces list */ 75 extern char *interfaces; /* list of user-requested interfaces. */ 76 extern int open_interfaces(void); 77 extern int write_interface(IF *, PKT *, int, struct sockaddr_in *); 78 extern void close_interfaces(void); 79 extern void detach_plp(dsvc_clnt_t *, PKT_LIST *); 80 extern void free_pktlist(dsvc_clnt_t *); 81 extern PKT_LIST *refresh_pktlist(dsvc_clnt_t *, PKT_LIST *); 82 extern int set_arp(IF *, struct in_addr *, uchar_t *, int, uchar_t); 83 84 extern int send_reply(IF *, PKT *, int, struct in_addr *); 85 extern void disp_if_stats(IF *); 86 87 extern int relay_agent(IF *, PKT_LIST *); 88 extern void determine_network(IF *, PKT_LIST *, struct in_addr *, 89 struct in_addr *); 90 extern boolean_t is_our_address(in_addr_t); 91 92 93 #ifdef __cplusplus 94 } 95 #endif 96 97 #endif /* _INTERFACES_H */