1 /* 2 * Copyright (c) 1980, 1986 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are permitted 6 * provided that this notice is preserved and that due credit is given 7 * to the University of California at Berkeley. The name of the University 8 * may not be used to endorse or promote products derived from this 9 * software without specific prior written permission. This software 10 * is provided ``as is'' without express or implied warranty. 11 * 12 * @(#)raw_cb.h 7.2 (Berkeley) 12/30/87 13 */ 14 15 /* 16 * Raw protocol interface control block. Used 17 * to tie a socket to the generic raw interface. 18 */ 19 struct rawcb { 20 struct rawcb *rcb_next; /* doubly linked list */ 21 struct rawcb *rcb_prev; 22 struct socket *rcb_socket; /* back pointer to socket */ 23 struct sockaddr rcb_faddr; /* destination address */ 24 struct sockaddr rcb_laddr; /* socket's address */ 25 struct sockproto rcb_proto; /* protocol family, protocol */ 26 caddr_t rcb_pcb; /* protocol specific stuff */ 27 struct mbuf *rcb_options; /* protocol specific options */ 28 struct route rcb_route; /* routing information */ 29 short rcb_flags; 30 }; 31 32 /* 33 * Since we can't interpret canonical addresses, 34 * we mark an address present in the flags field. 35 */ 36 #define RAW_LADDR 01 37 #define RAW_FADDR 02 38 #define RAW_DONTROUTE 04 /* no routing, default */ 39 40 #define sotorawcb(so) ((struct rawcb *)(so)->so_pcb) 41 42 /* 43 * Nominal space allocated to a raw socket. 44 */ 45 #define RAWSNDQ 2048 46 #define RAWRCVQ 2048 47 48 /* 49 * Format of raw interface header prepended by 50 * raw_input after call from protocol specific 51 * input routine. 52 */ 53 struct raw_header { 54 struct sockproto raw_proto; /* format of packet */ 55 struct sockaddr raw_dst; /* dst address for rawintr */ 56 struct sockaddr raw_src; /* src address for sbappendaddr */ 57 }; 58 59 #ifdef KERNEL 60 struct rawcb rawcb; /* head of list */ 61 #endif 62