Annotation of embedaddon/quagga/isisd/include-netbsd/clnp.h, revision 1.1
1.1 ! misho 1: /* $NetBSD: clnp.h,v 1.13 2001/08/20 12:00:54 wiz Exp $ */
! 2:
! 3: /*-
! 4: * Copyright (c) 1991, 1993, 1994
! 5: * The Regents of the University of California. All rights reserved.
! 6: *
! 7: * Redistribution and use in source and binary forms, with or without
! 8: * modification, are permitted provided that the following conditions
! 9: * are met:
! 10: * 1. Redistributions of source code must retain the above copyright
! 11: * notice, this list of conditions and the following disclaimer.
! 12: * 2. Redistributions in binary form must reproduce the above copyright
! 13: * notice, this list of conditions and the following disclaimer in the
! 14: * documentation and/or other materials provided with the distribution.
! 15: * 3. All advertising materials mentioning features or use of this software
! 16: * must display the following acknowledgement:
! 17: * This product includes software developed by the University of
! 18: * California, Berkeley and its contributors.
! 19: * 4. Neither the name of the University nor the names of its contributors
! 20: * may be used to endorse or promote products derived from this software
! 21: * without specific prior written permission.
! 22: *
! 23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 33: * SUCH DAMAGE.
! 34: *
! 35: * @(#)clnp.h 8.2 (Berkeley) 4/16/94
! 36: */
! 37:
! 38: /***********************************************************
! 39: Copyright IBM Corporation 1987
! 40:
! 41: All Rights Reserved
! 42:
! 43: Permission to use, copy, modify, and distribute this software and its
! 44: documentation for any purpose and without fee is hereby granted,
! 45: provided that the above copyright notice appear in all copies and that
! 46: both that copyright notice and this permission notice appear in
! 47: supporting documentation, and that the name of IBM not be
! 48: used in advertising or publicity pertaining to distribution of the
! 49: software without specific, written prior permission.
! 50:
! 51: IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
! 52: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
! 53: IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
! 54: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
! 55: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
! 56: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
! 57: SOFTWARE.
! 58:
! 59: ******************************************************************/
! 60:
! 61: /*
! 62: * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
! 63: */
! 64:
! 65: /* should be config option but cpp breaks with too many #defines */
! 66: #define DECBIT
! 67:
! 68: /*
! 69: * Return true if the mbuf is a cluster mbuf
! 70: */
! 71: #define IS_CLUSTER(m) ((m)->m_flags & M_EXT)
! 72:
! 73: /*
! 74: * Move the halfword into the two characters
! 75: */
! 76: #define HTOC(msb, lsb, hword)\
! 77: (msb) = (u_char)((hword) >> 8);\
! 78: (lsb) = (u_char)((hword) & 0xff)
! 79: /*
! 80: * Move the two charcters into the halfword
! 81: */
! 82: #define CTOH(msb, lsb, hword)\
! 83: (hword) = ((msb) << 8) | (lsb)
! 84:
! 85: /*
! 86: * Return true if the checksum has been set - ie. the checksum is
! 87: * not zero
! 88: */
! 89: #define CKSUM_REQUIRED(clnp)\
! 90: (((clnp)->cnf_cksum_msb != 0) || ((clnp)->cnf_cksum_lsb != 0))
! 91:
! 92: /*
! 93: * Fixed part of clnp header
! 94: */
! 95: struct clnp_fixed {
! 96: u_char cnf_proto_id; /* network layer protocol identifier */
! 97: u_char cnf_hdr_len; /* length indicator (octets) */
! 98: u_char cnf_vers; /* version/protocol identifier
! 99: * extension */
! 100: u_char cnf_ttl;/* lifetime (500 milliseconds) */
! 101: u_char cnf_type; /* type code */
! 102: /* Includes err_ok, more_segs, and seg_ok */
! 103: u_char cnf_seglen_msb; /* pdu segment length (octets) high
! 104: * byte */
! 105: u_char cnf_seglen_lsb; /* pdu segment length (octets) low
! 106: * byte */
! 107: u_char cnf_cksum_msb; /* checksum high byte */
! 108: u_char cnf_cksum_lsb; /* checksum low byte */
! 109: } __attribute__((packed));
! 110: #define CNF_TYPE 0x1f
! 111: #define CNF_ERR_OK 0x20
! 112: #define CNF_MORE_SEGS 0x40
! 113: #define CNF_SEG_OK 0x80
! 114:
! 115: #define CLNP_CKSUM_OFF 0x07 /* offset of checksum */
! 116:
! 117: #define clnl_fixed clnp_fixed
! 118:
! 119: /*
! 120: * Segmentation part of clnp header
! 121: */
! 122: struct clnp_segment {
! 123: u_short cng_id; /* data unit identifier */
! 124: u_short cng_off;/* segment offset */
! 125: u_short cng_tot_len; /* total length */
! 126: };
! 127:
! 128: /*
! 129: * Clnp fragment reassembly structures:
! 130: *
! 131: * All packets undergoing reassembly are linked together in
! 132: * clnp_fragl structures. Each clnp_fragl structure contains a
! 133: * pointer to the original clnp packet header, as well as a
! 134: * list of packet fragments. Each packet fragment
! 135: * is headed by a clnp_frag structure. This structure contains the
! 136: * offset of the first and last byte of the fragment, as well as
! 137: * a pointer to the data (an mbuf chain) of the fragment.
! 138: */
! 139:
! 140: /*
! 141: * NOTE:
! 142: * The clnp_frag structure is stored in an mbuf immedately
! 143: * preceding the fragment data. Since there are words in
! 144: * this struct, it must be word aligned.
! 145: *
! 146: * NOTE:
! 147: * All the fragment code assumes that the entire clnp header is
! 148: * contained in the first mbuf.
! 149: */
! 150: struct clnp_frag {
! 151: u_int cfr_first; /* offset of first byte of this frag */
! 152: u_int cfr_last; /* offset of last byte of this frag */
! 153: u_int cfr_bytes; /* bytes to shave to get to data */
! 154: struct mbuf *cfr_data; /* ptr to data for this frag */
! 155: struct clnp_frag *cfr_next; /* next fragment in list */
! 156: };
! 157:
! 158: struct clnp_fragl {
! 159: struct iso_addr cfl_src;/* source of the pkt */
! 160: struct iso_addr cfl_dst;/* destination of the pkt */
! 161: u_short cfl_id; /* id of the pkt */
! 162: u_char cfl_ttl;/* current ttl of pkt */
! 163: u_short cfl_last; /* offset of last byte of packet */
! 164: struct mbuf *cfl_orighdr; /* ptr to original header */
! 165: struct clnp_frag *cfl_frags; /* linked list of fragments for pkt */
! 166: struct clnp_fragl *cfl_next; /* next pkt being reassembled */
! 167: };
! 168:
! 169: /*
! 170: * The following structure is used to index into an options section
! 171: * of a clnp datagram. These values can be used without worry that
! 172: * offset or length fields are invalid or too big, etc. That is,
! 173: * the consistancy of the options will be guaranteed before this
! 174: * structure is filled in. Any pointer (field ending in p) is
! 175: * actually the offset from the beginning of the mbuf the option
! 176: * is contained in. A value of NULL for any pointer
! 177: * means that the option is not present. The length any option
! 178: * does not include the option code or option length fields.
! 179: */
! 180: struct clnp_optidx {
! 181: u_short cni_securep; /* ptr to start of security option */
! 182: char cni_secure_len; /* length of entire security option */
! 183:
! 184: u_short cni_srcrt_s; /* offset of start of src rt option */
! 185: u_short cni_srcrt_len; /* length of entire src rt option */
! 186:
! 187: u_short cni_recrtp; /* ptr to beginning of recrt option */
! 188: char cni_recrt_len; /* length of entire recrt option */
! 189:
! 190: char cni_priorp; /* ptr to priority option */
! 191:
! 192: u_short cni_qos_formatp; /* ptr to format of qos
! 193: * option */
! 194: char cni_qos_len; /* length of entire qos option */
! 195:
! 196: u_char cni_er_reason; /* reason from ER pdu option */
! 197:
! 198: /* ESIS options */
! 199:
! 200: u_short cni_esct; /* value from ISH ESCT option */
! 201:
! 202: u_short cni_netmaskp; /* ptr to beginning of netmask option */
! 203: char cni_netmask_len; /* length of entire netmask
! 204: * option */
! 205:
! 206: u_short cni_snpamaskp; /* ptr to start of snpamask option */
! 207: char cni_snpamask_len; /* length of entire snpamask
! 208: * option */
! 209:
! 210: };
! 211:
! 212: #define ER_INVALREAS 0xff /* code for invalid ER pdu discard reason */
! 213:
! 214: /* given an mbuf and addr of option, return offset from data of mbuf */
! 215: #define CLNP_OPTTOOFF(m, opt) ((u_short) (opt - mtod(m, caddr_t)))
! 216:
! 217: /* given an mbuf and offset of option, return address of option */
! 218: #define CLNP_OFFTOOPT(m, off) ((caddr_t) (mtod(m, caddr_t) + off))
! 219:
! 220: /* return true iff src route is valid */
! 221: #define CLNPSRCRT_VALID(oidx) ((oidx) && (oidx->cni_srcrt_s))
! 222:
! 223: /* return the offset field of the src rt */
! 224: #define CLNPSRCRT_OFF(oidx, options)\
! 225: (*((u_char *)(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + 1)))
! 226:
! 227: /* return the type field of the src rt */
! 228: #define CLNPSRCRT_TYPE(oidx, options)\
! 229: ((u_char)(*(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s))))
! 230:
! 231: /* return the length of the current address */
! 232: #define CLNPSRCRT_CLEN(oidx, options)\
! 233: ((u_char)(*(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + CLNPSRCRT_OFF(oidx, options) - 1)))
! 234:
! 235: /* return the address of the current address */
! 236: #define CLNPSRCRT_CADDR(oidx, options)\
! 237: ((caddr_t)(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + CLNPSRCRT_OFF(oidx, options)))
! 238:
! 239: /*
! 240: * return true if the src route has run out of routes this is true if the
! 241: * offset of next route is greater than the end of the rt
! 242: */
! 243: #define CLNPSRCRT_TERM(oidx, options)\
! 244: (CLNPSRCRT_OFF(oidx, options) > oidx->cni_srcrt_len)
! 245:
! 246: /*
! 247: * Options a user can set/get
! 248: */
! 249: #define CLNPOPT_FLAGS 0x01 /* flags: seg permitted, no er xmit, etc */
! 250: #define CLNPOPT_OPTS 0x02 /* datagram options */
! 251:
! 252: /*
! 253: * Values for particular datagram options
! 254: */
! 255: #define CLNPOVAL_PAD 0xcc /* padding */
! 256: #define CLNPOVAL_SECURE 0xc5 /* security */
! 257: #define CLNPOVAL_SRCRT 0xc8 /* source routing */
! 258: #define CLNPOVAL_RECRT 0xcb /* record route */
! 259: #define CLNPOVAL_QOS 0xc3 /* quality of service */
! 260: #define CLNPOVAL_PRIOR 0xcd /* priority */
! 261: #define CLNPOVAL_ERREAS 0xc1 /* ER PDU ONLY: reason for discard */
! 262:
! 263: #define CLNPOVAL_SRCSPEC 0x40 /* source address specific */
! 264: #define CLNPOVAL_DSTSPEC 0x80 /* destination address specific */
! 265: #define CLNPOVAL_GLOBAL 0xc0 /* globally unique */
! 266:
! 267: /* Globally Unique QOS */
! 268: #define CLNPOVAL_SEQUENCING 0x10 /* sequencing preferred */
! 269: #define CLNPOVAL_CONGESTED 0x08 /* congestion experienced */
! 270: #define CLNPOVAL_LOWDELAY 0x04 /* low transit delay */
! 271:
! 272: #define CLNPOVAL_PARTRT 0x00 /* partial source routing */
! 273: #define CLNPOVAL_COMPRT 0x01 /* complete source routing */
! 274:
! 275: /*
! 276: * Clnp flags used in a control block flags field.
! 277: * NOTE: these must be out of the range of bits defined in ../net/raw_cb.h
! 278: */
! 279: #define CLNP_NO_SEG 0x010 /* segmentation not permitted */
! 280: #define CLNP_NO_ER 0x020 /* do not generate ERs */
! 281: #define CLNP_SEND_RAW 0x080 /* send pkt as RAW DT not TP DT */
! 282: #define CLNP_NO_CKSUM 0x100 /* don't use clnp checksum */
! 283: #define CLNP_ECHO 0x200 /* send echo request */
! 284: #define CLNP_NOCACHE 0x400 /* don't store cache information */
! 285: #define CLNP_ECHOR 0x800 /* send echo reply */
! 286:
! 287: /* valid clnp flags */
! 288: #define CLNP_VFLAGS \
! 289: (CLNP_SEND_RAW|CLNP_NO_SEG|CLNP_NO_ER|CLNP_NO_CKSUM|\
! 290: CLNP_ECHO|CLNP_NOCACHE|CLNP_ECHOR)
! 291:
! 292: /*
! 293: * Constants used by clnp
! 294: */
! 295: #define CLNP_HDR_MIN (sizeof (struct clnp_fixed))
! 296: #define CLNP_HDR_MAX (254)
! 297: #define CLNP_TTL_UNITS 2 /* 500 milliseconds */
! 298: #define CLNP_TTL 15*CLNP_TTL_UNITS /* time to live (seconds) */
! 299: #define ISO8473_V1 0x01
! 300:
! 301: /*
! 302: * Clnp packet types
! 303: * In order to test raw clnp and tp/clnp simultaneously, a third type of
! 304: * packet has been defined: CLNP_RAW. This is done so that the input
! 305: * routine can switch to the correct input routine (rclnp_input or
! 306: * tpclnp_input) based on the type field. If clnp had a higher level
! 307: * protocol field, this would not be necessary.
! 308: */
! 309: #define CLNP_DT 0x1C /* normal data */
! 310: #define CLNP_ER 0x01 /* error report */
! 311: #define CLNP_RAW 0x1D /* debug only */
! 312: #define CLNP_EC 0x1E /* echo packet */
! 313: #define CLNP_ECR 0x1F /* echo reply */
! 314:
! 315: /*
! 316: * ER pdu error codes
! 317: */
! 318: #define GEN_NOREAS 0x00 /* reason not specified */
! 319: #define GEN_PROTOERR 0x01 /* protocol procedure error */
! 320: #define GEN_BADCSUM 0x02 /* incorrect checksum */
! 321: #define GEN_CONGEST 0x03 /* pdu discarded due to congestion */
! 322: #define GEN_HDRSYNTAX 0x04 /* header syntax error */
! 323: #define GEN_SEGNEEDED 0x05 /* need segmentation but not allowed */
! 324: #define GEN_INCOMPLETE 0x06 /* incomplete pdu received */
! 325: #define GEN_DUPOPT 0x07 /* duplicate option */
! 326:
! 327: /* address errors */
! 328: #define ADDR_DESTUNREACH 0x80 /* destination address unreachable */
! 329: #define ADDR_DESTUNKNOWN 0x81 /* destination address unknown */
! 330:
! 331: /* source routing */
! 332: #define SRCRT_UNSPECERR 0x90 /* unspecified src rt error */
! 333: #define SRCRT_SYNTAX 0x91 /* syntax error in src rt field */
! 334: #define SRCRT_UNKNOWNADDR 0x92 /* unknown addr in src rt field */
! 335: #define SRCRT_BADPATH 0x93 /* path not acceptable */
! 336:
! 337: /* lifetime */
! 338: #define TTL_EXPTRANSIT 0xa0 /* lifetime expired during transit */
! 339: #define TTL_EXPREASS 0xa1 /* lifetime expired during reassembly */
! 340:
! 341: /* pdu discarded */
! 342: #define DISC_UNSUPPOPT 0xb0 /* unsupported option not specified? */
! 343: #define DISC_UNSUPPVERS 0xb1 /* unsupported protocol version */
! 344: #define DISC_UNSUPPSECURE 0xb2 /* unsupported security option */
! 345: #define DISC_UNSUPPSRCRT 0xb3 /* unsupported src rt option */
! 346: #define DISC_UNSUPPRECRT 0xb4 /* unsupported rec rt option */
! 347:
! 348: /* reassembly */
! 349: #define REASS_INTERFERE 0xc0 /* reassembly interference */
! 350: #define CLNP_ERRORS 22
! 351:
! 352:
! 353: #ifdef CLNP_ER_CODES
! 354: u_char clnp_er_codes[CLNP_ERRORS] = {
! 355: GEN_NOREAS, GEN_PROTOERR, GEN_BADCSUM, GEN_CONGEST,
! 356: GEN_HDRSYNTAX, GEN_SEGNEEDED, GEN_INCOMPLETE, GEN_DUPOPT,
! 357: ADDR_DESTUNREACH, ADDR_DESTUNKNOWN,
! 358: SRCRT_UNSPECERR, SRCRT_SYNTAX, SRCRT_UNKNOWNADDR, SRCRT_BADPATH,
! 359: TTL_EXPTRANSIT, TTL_EXPREASS,
! 360: DISC_UNSUPPOPT, DISC_UNSUPPVERS, DISC_UNSUPPSECURE,
! 361: DISC_UNSUPPSRCRT, DISC_UNSUPPRECRT, REASS_INTERFERE
! 362: };
! 363: #endif
! 364:
! 365: #ifdef TROLL
! 366:
! 367: #define TR_DUPEND 0x01 /* duplicate end of fragment */
! 368: #define TR_DUPPKT 0x02 /* duplicate entire packet */
! 369: #define TR_DROPPKT 0x04 /* drop packet on output */
! 370: #define TR_TRIM 0x08 /* trim bytes from packet */
! 371: #define TR_CHANGE 0x10 /* change bytes in packet */
! 372: #define TR_MTU 0x20 /* delta to change device mtu */
! 373: #define TR_CHUCK 0x40 /* drop packet in rclnp_input */
! 374: #define TR_BLAST 0x80 /* force rclnp_output to blast many
! 375: * packet */
! 376: #define TR_RAWLOOP 0x100 /* make if_loop call clnpintr
! 377: * directly */
! 378: struct troll {
! 379: int tr_ops; /* operations to perform */
! 380: float tr_dup_size; /* % to duplicate */
! 381: float tr_dup_freq; /* frequency to duplicate packets */
! 382: float tr_drop_freq; /* frequence to drop packets */
! 383: int tr_mtu_adj; /* delta to adjust if mtu */
! 384: int tr_blast_cnt; /* # of pkts to blast out */
! 385: };
! 386:
! 387: #define SN_OUTPUT(clcp, m)\
! 388: troll_output(clcp->clc_ifp, m, clcp->clc_firsthop, clcp->clc_rt)
! 389:
! 390: #define SN_MTU(ifp, rt) (((rt && rt->rt_rmx.rmx_mtu) ?\
! 391: rt->rt_rmx.rmx_mtu : clnp_badmtu(ifp, rt, __LINE__, __FILE__))\
! 392: - trollctl.tr_mtu_adj)
! 393:
! 394: #ifdef _KERNEL
! 395: extern float troll_random;
! 396: #endif
! 397:
! 398: #else /* NO TROLL */
! 399:
! 400: #define SN_OUTPUT(clcp, m)\
! 401: (*clcp->clc_ifp->if_output)(clcp->clc_ifp, m, clcp->clc_firsthop, \
! 402: clcp->clc_rt)
! 403:
! 404: #define SN_MTU(ifp, rt) (((rt && rt->rt_rmx.rmx_mtu) ?\
! 405: rt->rt_rmx.rmx_mtu : clnp_badmtu(ifp, rt, __LINE__, __FILE__)))
! 406:
! 407: #endif /* TROLL */
! 408:
! 409: /*
! 410: * Macro to remove an address from a clnp header
! 411: */
! 412: #define CLNP_EXTRACT_ADDR(isoa, hoff, hend)\
! 413: {\
! 414: isoa.isoa_len = (u_char)*hoff;\
! 415: if ((((++hoff) + isoa.isoa_len) > hend) ||\
! 416: (isoa.isoa_len > 20) || (isoa.isoa_len == 0)) {\
! 417: hoff = (caddr_t)0;\
! 418: } else {\
! 419: (void) bcopy(hoff, (caddr_t)isoa.isoa_genaddr, \
! 420: isoa.isoa_len);\
! 421: hoff += isoa.isoa_len;\
! 422: }\
! 423: }
! 424:
! 425: /*
! 426: * Macro to insert an address into a clnp header
! 427: */
! 428: #define CLNP_INSERT_ADDR(hoff, isoa)\
! 429: *hoff++ = (isoa).isoa_len;\
! 430: (void) bcopy((caddr_t)((isoa).isoa_genaddr), hoff, (isoa).isoa_len);\
! 431: hoff += (isoa).isoa_len;
! 432:
! 433: /*
! 434: * Clnp hdr cache. Whenever a clnp packet is sent, a copy of the
! 435: * header is made and kept in this cache. In addition to a copy of
! 436: * the cached clnp hdr, the cache contains
! 437: * information necessary to determine whether the new packet
! 438: * to send requires a new header to be built.
! 439: */
! 440: struct clnp_cache {
! 441: /* these fields are used to check the validity of the cache */
! 442: struct iso_addr clc_dst;/* destination of packet */
! 443: struct mbuf *clc_options; /* ptr to options mbuf */
! 444: int clc_flags; /* flags passed to clnp_output */
! 445:
! 446: /* these fields are state that clnp_output requires to finish the pkt */
! 447: int clc_segoff; /* offset of seg part of header */
! 448: struct rtentry *clc_rt; /* ptr to rtentry (points into the route
! 449: * structure) */
! 450: struct sockaddr *clc_firsthop; /* first hop of packet */
! 451: struct ifnet *clc_ifp;/* ptr to interface structure */
! 452: struct iso_ifaddr
! 453: *clc_ifa;/* ptr to interface address */
! 454: struct mbuf *clc_hdr;/* cached pkt hdr (finally)! */
! 455: };
! 456:
! 457: #ifdef _KERNEL
! 458: struct iso_addr;
! 459: struct sockaddr_iso;
! 460: struct mbuf;
! 461: struct clnp_segment;
! 462: struct sockaddr;
! 463: struct rt_entry;
! 464: struct clnp_fragl;
! 465: struct clnp_optidx;
! 466: struct isopcb;
! 467: struct snpa_hdr;
! 468: struct iso_ifaddr;
! 469: struct route_iso;
! 470:
! 471: /* clnp_debug.c */
! 472: char *clnp_hexp __P((char *, int, char *));
! 473: char *clnp_iso_addrp __P((struct iso_addr *));
! 474: char *clnp_saddr_isop __P((struct sockaddr_iso *));
! 475:
! 476: /* clnp_er.c */
! 477: void clnp_er_input __P((struct mbuf *, struct iso_addr *, u_int));
! 478: void clnp_discard __P((struct mbuf *, u_int));
! 479: void clnp_emit_er __P((struct mbuf *, u_int));
! 480: int clnp_er_index __P((u_int));
! 481:
! 482: int clnp_fragment __P((struct ifnet *, struct mbuf *, struct sockaddr *,
! 483: int, int, int, struct rtentry *));
! 484: struct mbuf *clnp_reass __P((struct mbuf *, struct iso_addr *,
! 485: struct iso_addr *, struct clnp_segment *));
! 486: int clnp_newpkt __P((struct mbuf *, struct iso_addr *, struct iso_addr *,
! 487: struct clnp_segment *));
! 488: void clnp_insert_frag __P((struct clnp_fragl *, struct mbuf *,
! 489: struct clnp_segment *));
! 490: struct mbuf *clnp_comp_pdu __P((struct clnp_fragl *));
! 491: #ifdef TROLL
! 492: float troll_random __P((void));
! 493: int troll_output __P((struct ifnet *, struct mbuf *, struct sockaddr *,
! 494: struct rtentry *));
! 495: #endif
! 496:
! 497: /* clnp_input.c */
! 498: void clnp_init __P((void));
! 499: void clnlintr __P((void));
! 500: void clnp_input __P((struct mbuf *, ...));
! 501:
! 502: /* clnp_options.c */
! 503: void clnp_update_srcrt __P((struct mbuf *, struct clnp_optidx *));
! 504: void clnp_dooptions __P((struct mbuf *, struct clnp_optidx *, struct ifnet *,
! 505: struct iso_addr *));
! 506: int clnp_set_opts __P((struct mbuf **, struct mbuf **));
! 507: int clnp_opt_sanity __P((struct mbuf *, caddr_t, int, struct clnp_optidx *));
! 508:
! 509: /* clnp_output.c */
! 510: int clnp_output __P((struct mbuf *, ...));
! 511: void clnp_ctloutput __P((void));
! 512:
! 513: /* clnp_raw.c */
! 514: void rclnp_input __P((struct mbuf *, ...));
! 515: int rclnp_output __P((struct mbuf *, ...));
! 516: int rclnp_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
! 517: int clnp_usrreq __P((struct socket *, int, struct mbuf *, struct mbuf *,
! 518: struct mbuf *, struct proc *));
! 519:
! 520: /* clnp_subr.c */
! 521: struct mbuf *clnp_data_ck __P((struct mbuf *, int));
! 522: caddr_t clnp_extract_addr __P((caddr_t, int, struct iso_addr *,
! 523: struct iso_addr *));
! 524: int clnp_ours __P((struct iso_addr *));
! 525: void clnp_forward __P((struct mbuf *, int, struct iso_addr *,
! 526: struct clnp_optidx *, int, struct snpa_hdr *));
! 527: caddr_t clnp_insert_addr __P((caddr_t, struct iso_addr *, struct iso_addr *));
! 528: int clnp_route __P((struct iso_addr *, struct route_iso *, int,
! 529: struct sockaddr **, struct iso_ifaddr **));
! 530: int clnp_srcroute __P((struct mbuf *, struct clnp_optidx *, struct route_iso *,
! 531: struct sockaddr **, struct iso_ifaddr **,
! 532: struct iso_addr *));
! 533: int clnp_echoreply __P((struct mbuf *, int, struct sockaddr_iso *,
! 534: struct sockaddr_iso *, struct clnp_optidx *));
! 535: int clnp_badmtu __P((struct ifnet *, struct rtentry *, int, char *));
! 536: void clnp_ypocb __P((caddr_t, caddr_t, u_int));
! 537:
! 538: /* clnp_timer.c */
! 539: struct clnp_fragl *clnp_freefrags __P((struct clnp_fragl *));
! 540: void clnp_slowtimo __P((void));
! 541: void clnp_drain __P((void));
! 542:
! 543: #ifdef TROLL
! 544: struct troll trollctl;
! 545: #endif /* TROLL */
! 546:
! 547: #endif /* _KERNEL */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>