/* $NetBSD: clnp.h,v 1.13 2001/08/20 12:00:54 wiz Exp $ */ | |
/*- | |
* Copyright (c) 1991, 1993, 1994 | |
* The Regents of the University of California. All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions | |
* are met: | |
* 1. Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* 2. Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in the | |
* documentation and/or other materials provided with the distribution. | |
* 3. All advertising materials mentioning features or use of this software | |
* must display the following acknowledgement: | |
* This product includes software developed by the University of | |
* California, Berkeley and its contributors. | |
* 4. Neither the name of the University nor the names of its contributors | |
* may be used to endorse or promote products derived from this software | |
* without specific prior written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
* SUCH DAMAGE. | |
* | |
* @(#)clnp.h 8.2 (Berkeley) 4/16/94 | |
*/ | |
/*********************************************************** | |
Copyright IBM Corporation 1987 | |
All Rights Reserved | |
Permission to use, copy, modify, and distribute this software and its | |
documentation for any purpose and without fee is hereby granted, | |
provided that the above copyright notice appear in all copies and that | |
both that copyright notice and this permission notice appear in | |
supporting documentation, and that the name of IBM not be | |
used in advertising or publicity pertaining to distribution of the | |
software without specific, written prior permission. | |
IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | |
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL | |
IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | |
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |
SOFTWARE. | |
******************************************************************/ | |
/* | |
* ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison | |
*/ | |
/* should be config option but cpp breaks with too many #defines */ | |
#define DECBIT | |
/* | |
* Return true if the mbuf is a cluster mbuf | |
*/ | |
#define IS_CLUSTER(m) ((m)->m_flags & M_EXT) | |
/* | |
* Move the halfword into the two characters | |
*/ | |
#define HTOC(msb, lsb, hword)\ | |
(msb) = (u_char)((hword) >> 8);\ | |
(lsb) = (u_char)((hword) & 0xff) | |
/* | |
* Move the two charcters into the halfword | |
*/ | |
#define CTOH(msb, lsb, hword)\ | |
(hword) = ((msb) << 8) | (lsb) | |
/* | |
* Return true if the checksum has been set - ie. the checksum is | |
* not zero | |
*/ | |
#define CKSUM_REQUIRED(clnp)\ | |
(((clnp)->cnf_cksum_msb != 0) || ((clnp)->cnf_cksum_lsb != 0)) | |
/* | |
* Fixed part of clnp header | |
*/ | |
struct clnp_fixed { | |
u_char cnf_proto_id; /* network layer protocol identifier */ | |
u_char cnf_hdr_len; /* length indicator (octets) */ | |
u_char cnf_vers; /* version/protocol identifier | |
* extension */ | |
u_char cnf_ttl;/* lifetime (500 milliseconds) */ | |
u_char cnf_type; /* type code */ | |
/* Includes err_ok, more_segs, and seg_ok */ | |
u_char cnf_seglen_msb; /* pdu segment length (octets) high | |
* byte */ | |
u_char cnf_seglen_lsb; /* pdu segment length (octets) low | |
* byte */ | |
u_char cnf_cksum_msb; /* checksum high byte */ | |
u_char cnf_cksum_lsb; /* checksum low byte */ | |
} __attribute__((packed)); | |
#define CNF_TYPE 0x1f | |
#define CNF_ERR_OK 0x20 | |
#define CNF_MORE_SEGS 0x40 | |
#define CNF_SEG_OK 0x80 | |
#define CLNP_CKSUM_OFF 0x07 /* offset of checksum */ | |
#define clnl_fixed clnp_fixed | |
/* | |
* Segmentation part of clnp header | |
*/ | |
struct clnp_segment { | |
u_short cng_id; /* data unit identifier */ | |
u_short cng_off;/* segment offset */ | |
u_short cng_tot_len; /* total length */ | |
}; | |
/* | |
* Clnp fragment reassembly structures: | |
* | |
* All packets undergoing reassembly are linked together in | |
* clnp_fragl structures. Each clnp_fragl structure contains a | |
* pointer to the original clnp packet header, as well as a | |
* list of packet fragments. Each packet fragment | |
* is headed by a clnp_frag structure. This structure contains the | |
* offset of the first and last byte of the fragment, as well as | |
* a pointer to the data (an mbuf chain) of the fragment. | |
*/ | |
/* | |
* NOTE: | |
* The clnp_frag structure is stored in an mbuf immedately | |
* preceding the fragment data. Since there are words in | |
* this struct, it must be word aligned. | |
* | |
* NOTE: | |
* All the fragment code assumes that the entire clnp header is | |
* contained in the first mbuf. | |
*/ | |
struct clnp_frag { | |
u_int cfr_first; /* offset of first byte of this frag */ | |
u_int cfr_last; /* offset of last byte of this frag */ | |
u_int cfr_bytes; /* bytes to shave to get to data */ | |
struct mbuf *cfr_data; /* ptr to data for this frag */ | |
struct clnp_frag *cfr_next; /* next fragment in list */ | |
}; | |
struct clnp_fragl { | |
struct iso_addr cfl_src;/* source of the pkt */ | |
struct iso_addr cfl_dst;/* destination of the pkt */ | |
u_short cfl_id; /* id of the pkt */ | |
u_char cfl_ttl;/* current ttl of pkt */ | |
u_short cfl_last; /* offset of last byte of packet */ | |
struct mbuf *cfl_orighdr; /* ptr to original header */ | |
struct clnp_frag *cfl_frags; /* linked list of fragments for pkt */ | |
struct clnp_fragl *cfl_next; /* next pkt being reassembled */ | |
}; | |
/* | |
* The following structure is used to index into an options section | |
* of a clnp datagram. These values can be used without worry that | |
* offset or length fields are invalid or too big, etc. That is, | |
* the consistancy of the options will be guaranteed before this | |
* structure is filled in. Any pointer (field ending in p) is | |
* actually the offset from the beginning of the mbuf the option | |
* is contained in. A value of NULL for any pointer | |
* means that the option is not present. The length any option | |
* does not include the option code or option length fields. | |
*/ | |
struct clnp_optidx { | |
u_short cni_securep; /* ptr to start of security option */ | |
char cni_secure_len; /* length of entire security option */ | |
u_short cni_srcrt_s; /* offset of start of src rt option */ | |
u_short cni_srcrt_len; /* length of entire src rt option */ | |
u_short cni_recrtp; /* ptr to beginning of recrt option */ | |
char cni_recrt_len; /* length of entire recrt option */ | |
char cni_priorp; /* ptr to priority option */ | |
u_short cni_qos_formatp; /* ptr to format of qos | |
* option */ | |
char cni_qos_len; /* length of entire qos option */ | |
u_char cni_er_reason; /* reason from ER pdu option */ | |
/* ESIS options */ | |
u_short cni_esct; /* value from ISH ESCT option */ | |
u_short cni_netmaskp; /* ptr to beginning of netmask option */ | |
char cni_netmask_len; /* length of entire netmask | |
* option */ | |
u_short cni_snpamaskp; /* ptr to start of snpamask option */ | |
char cni_snpamask_len; /* length of entire snpamask | |
* option */ | |
}; | |
#define ER_INVALREAS 0xff /* code for invalid ER pdu discard reason */ | |
/* given an mbuf and addr of option, return offset from data of mbuf */ | |
#define CLNP_OPTTOOFF(m, opt) ((u_short) (opt - mtod(m, caddr_t))) | |
/* given an mbuf and offset of option, return address of option */ | |
#define CLNP_OFFTOOPT(m, off) ((caddr_t) (mtod(m, caddr_t) + off)) | |
/* return true iff src route is valid */ | |
#define CLNPSRCRT_VALID(oidx) ((oidx) && (oidx->cni_srcrt_s)) | |
/* return the offset field of the src rt */ | |
#define CLNPSRCRT_OFF(oidx, options)\ | |
(*((u_char *)(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + 1))) | |
/* return the type field of the src rt */ | |
#define CLNPSRCRT_TYPE(oidx, options)\ | |
((u_char)(*(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s)))) | |
/* return the length of the current address */ | |
#define CLNPSRCRT_CLEN(oidx, options)\ | |
((u_char)(*(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + CLNPSRCRT_OFF(oidx, options) - 1))) | |
/* return the address of the current address */ | |
#define CLNPSRCRT_CADDR(oidx, options)\ | |
((caddr_t)(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + CLNPSRCRT_OFF(oidx, options))) | |
/* | |
* return true if the src route has run out of routes this is true if the | |
* offset of next route is greater than the end of the rt | |
*/ | |
#define CLNPSRCRT_TERM(oidx, options)\ | |
(CLNPSRCRT_OFF(oidx, options) > oidx->cni_srcrt_len) | |
/* | |
* Options a user can set/get | |
*/ | |
#define CLNPOPT_FLAGS 0x01 /* flags: seg permitted, no er xmit, etc */ | |
#define CLNPOPT_OPTS 0x02 /* datagram options */ | |
/* | |
* Values for particular datagram options | |
*/ | |
#define CLNPOVAL_PAD 0xcc /* padding */ | |
#define CLNPOVAL_SECURE 0xc5 /* security */ | |
#define CLNPOVAL_SRCRT 0xc8 /* source routing */ | |
#define CLNPOVAL_RECRT 0xcb /* record route */ | |
#define CLNPOVAL_QOS 0xc3 /* quality of service */ | |
#define CLNPOVAL_PRIOR 0xcd /* priority */ | |
#define CLNPOVAL_ERREAS 0xc1 /* ER PDU ONLY: reason for discard */ | |
#define CLNPOVAL_SRCSPEC 0x40 /* source address specific */ | |
#define CLNPOVAL_DSTSPEC 0x80 /* destination address specific */ | |
#define CLNPOVAL_GLOBAL 0xc0 /* globally unique */ | |
/* Globally Unique QOS */ | |
#define CLNPOVAL_SEQUENCING 0x10 /* sequencing preferred */ | |
#define CLNPOVAL_CONGESTED 0x08 /* congestion experienced */ | |
#define CLNPOVAL_LOWDELAY 0x04 /* low transit delay */ | |
#define CLNPOVAL_PARTRT 0x00 /* partial source routing */ | |
#define CLNPOVAL_COMPRT 0x01 /* complete source routing */ | |
/* | |
* Clnp flags used in a control block flags field. | |
* NOTE: these must be out of the range of bits defined in ../net/raw_cb.h | |
*/ | |
#define CLNP_NO_SEG 0x010 /* segmentation not permitted */ | |
#define CLNP_NO_ER 0x020 /* do not generate ERs */ | |
#define CLNP_SEND_RAW 0x080 /* send pkt as RAW DT not TP DT */ | |
#define CLNP_NO_CKSUM 0x100 /* don't use clnp checksum */ | |
#define CLNP_ECHO 0x200 /* send echo request */ | |
#define CLNP_NOCACHE 0x400 /* don't store cache information */ | |
#define CLNP_ECHOR 0x800 /* send echo reply */ | |
/* valid clnp flags */ | |
#define CLNP_VFLAGS \ | |
(CLNP_SEND_RAW|CLNP_NO_SEG|CLNP_NO_ER|CLNP_NO_CKSUM|\ | |
CLNP_ECHO|CLNP_NOCACHE|CLNP_ECHOR) | |
/* | |
* Constants used by clnp | |
*/ | |
#define CLNP_HDR_MIN (sizeof (struct clnp_fixed)) | |
#define CLNP_HDR_MAX (254) | |
#define CLNP_TTL_UNITS 2 /* 500 milliseconds */ | |
#define CLNP_TTL 15*CLNP_TTL_UNITS /* time to live (seconds) */ | |
#define ISO8473_V1 0x01 | |
/* | |
* Clnp packet types | |
* In order to test raw clnp and tp/clnp simultaneously, a third type of | |
* packet has been defined: CLNP_RAW. This is done so that the input | |
* routine can switch to the correct input routine (rclnp_input or | |
* tpclnp_input) based on the type field. If clnp had a higher level | |
* protocol field, this would not be necessary. | |
*/ | |
#define CLNP_DT 0x1C /* normal data */ | |
#define CLNP_ER 0x01 /* error report */ | |
#define CLNP_RAW 0x1D /* debug only */ | |
#define CLNP_EC 0x1E /* echo packet */ | |
#define CLNP_ECR 0x1F /* echo reply */ | |
/* | |
* ER pdu error codes | |
*/ | |
#define GEN_NOREAS 0x00 /* reason not specified */ | |
#define GEN_PROTOERR 0x01 /* protocol procedure error */ | |
#define GEN_BADCSUM 0x02 /* incorrect checksum */ | |
#define GEN_CONGEST 0x03 /* pdu discarded due to congestion */ | |
#define GEN_HDRSYNTAX 0x04 /* header syntax error */ | |
#define GEN_SEGNEEDED 0x05 /* need segmentation but not allowed */ | |
#define GEN_INCOMPLETE 0x06 /* incomplete pdu received */ | |
#define GEN_DUPOPT 0x07 /* duplicate option */ | |
/* address errors */ | |
#define ADDR_DESTUNREACH 0x80 /* destination address unreachable */ | |
#define ADDR_DESTUNKNOWN 0x81 /* destination address unknown */ | |
/* source routing */ | |
#define SRCRT_UNSPECERR 0x90 /* unspecified src rt error */ | |
#define SRCRT_SYNTAX 0x91 /* syntax error in src rt field */ | |
#define SRCRT_UNKNOWNADDR 0x92 /* unknown addr in src rt field */ | |
#define SRCRT_BADPATH 0x93 /* path not acceptable */ | |
/* lifetime */ | |
#define TTL_EXPTRANSIT 0xa0 /* lifetime expired during transit */ | |
#define TTL_EXPREASS 0xa1 /* lifetime expired during reassembly */ | |
/* pdu discarded */ | |
#define DISC_UNSUPPOPT 0xb0 /* unsupported option not specified? */ | |
#define DISC_UNSUPPVERS 0xb1 /* unsupported protocol version */ | |
#define DISC_UNSUPPSECURE 0xb2 /* unsupported security option */ | |
#define DISC_UNSUPPSRCRT 0xb3 /* unsupported src rt option */ | |
#define DISC_UNSUPPRECRT 0xb4 /* unsupported rec rt option */ | |
/* reassembly */ | |
#define REASS_INTERFERE 0xc0 /* reassembly interference */ | |
#define CLNP_ERRORS 22 | |
#ifdef CLNP_ER_CODES | |
u_char clnp_er_codes[CLNP_ERRORS] = { | |
GEN_NOREAS, GEN_PROTOERR, GEN_BADCSUM, GEN_CONGEST, | |
GEN_HDRSYNTAX, GEN_SEGNEEDED, GEN_INCOMPLETE, GEN_DUPOPT, | |
ADDR_DESTUNREACH, ADDR_DESTUNKNOWN, | |
SRCRT_UNSPECERR, SRCRT_SYNTAX, SRCRT_UNKNOWNADDR, SRCRT_BADPATH, | |
TTL_EXPTRANSIT, TTL_EXPREASS, | |
DISC_UNSUPPOPT, DISC_UNSUPPVERS, DISC_UNSUPPSECURE, | |
DISC_UNSUPPSRCRT, DISC_UNSUPPRECRT, REASS_INTERFERE | |
}; | |
#endif | |
#ifdef TROLL | |
#define TR_DUPEND 0x01 /* duplicate end of fragment */ | |
#define TR_DUPPKT 0x02 /* duplicate entire packet */ | |
#define TR_DROPPKT 0x04 /* drop packet on output */ | |
#define TR_TRIM 0x08 /* trim bytes from packet */ | |
#define TR_CHANGE 0x10 /* change bytes in packet */ | |
#define TR_MTU 0x20 /* delta to change device mtu */ | |
#define TR_CHUCK 0x40 /* drop packet in rclnp_input */ | |
#define TR_BLAST 0x80 /* force rclnp_output to blast many | |
* packet */ | |
#define TR_RAWLOOP 0x100 /* make if_loop call clnpintr | |
* directly */ | |
struct troll { | |
int tr_ops; /* operations to perform */ | |
float tr_dup_size; /* % to duplicate */ | |
float tr_dup_freq; /* frequency to duplicate packets */ | |
float tr_drop_freq; /* frequence to drop packets */ | |
int tr_mtu_adj; /* delta to adjust if mtu */ | |
int tr_blast_cnt; /* # of pkts to blast out */ | |
}; | |
#define SN_OUTPUT(clcp, m)\ | |
troll_output(clcp->clc_ifp, m, clcp->clc_firsthop, clcp->clc_rt) | |
#define SN_MTU(ifp, rt) (((rt && rt->rt_rmx.rmx_mtu) ?\ | |
rt->rt_rmx.rmx_mtu : clnp_badmtu(ifp, rt, __LINE__, __FILE__))\ | |
- trollctl.tr_mtu_adj) | |
#ifdef _KERNEL | |
extern float troll_random; | |
#endif | |
#else /* NO TROLL */ | |
#define SN_OUTPUT(clcp, m)\ | |
(*clcp->clc_ifp->if_output)(clcp->clc_ifp, m, clcp->clc_firsthop, \ | |
clcp->clc_rt) | |
#define SN_MTU(ifp, rt) (((rt && rt->rt_rmx.rmx_mtu) ?\ | |
rt->rt_rmx.rmx_mtu : clnp_badmtu(ifp, rt, __LINE__, __FILE__))) | |
#endif /* TROLL */ | |
/* | |
* Macro to remove an address from a clnp header | |
*/ | |
#define CLNP_EXTRACT_ADDR(isoa, hoff, hend)\ | |
{\ | |
isoa.isoa_len = (u_char)*hoff;\ | |
if ((((++hoff) + isoa.isoa_len) > hend) ||\ | |
(isoa.isoa_len > 20) || (isoa.isoa_len == 0)) {\ | |
hoff = (caddr_t)0;\ | |
} else {\ | |
(void) bcopy(hoff, (caddr_t)isoa.isoa_genaddr, \ | |
isoa.isoa_len);\ | |
hoff += isoa.isoa_len;\ | |
}\ | |
} | |
/* | |
* Macro to insert an address into a clnp header | |
*/ | |
#define CLNP_INSERT_ADDR(hoff, isoa)\ | |
*hoff++ = (isoa).isoa_len;\ | |
(void) bcopy((caddr_t)((isoa).isoa_genaddr), hoff, (isoa).isoa_len);\ | |
hoff += (isoa).isoa_len; | |
/* | |
* Clnp hdr cache. Whenever a clnp packet is sent, a copy of the | |
* header is made and kept in this cache. In addition to a copy of | |
* the cached clnp hdr, the cache contains | |
* information necessary to determine whether the new packet | |
* to send requires a new header to be built. | |
*/ | |
struct clnp_cache { | |
/* these fields are used to check the validity of the cache */ | |
struct iso_addr clc_dst;/* destination of packet */ | |
struct mbuf *clc_options; /* ptr to options mbuf */ | |
int clc_flags; /* flags passed to clnp_output */ | |
/* these fields are state that clnp_output requires to finish the pkt */ | |
int clc_segoff; /* offset of seg part of header */ | |
struct rtentry *clc_rt; /* ptr to rtentry (points into the route | |
* structure) */ | |
struct sockaddr *clc_firsthop; /* first hop of packet */ | |
struct ifnet *clc_ifp;/* ptr to interface structure */ | |
struct iso_ifaddr | |
*clc_ifa;/* ptr to interface address */ | |
struct mbuf *clc_hdr;/* cached pkt hdr (finally)! */ | |
}; | |
#ifdef _KERNEL | |
struct iso_addr; | |
struct sockaddr_iso; | |
struct mbuf; | |
struct clnp_segment; | |
struct sockaddr; | |
struct rt_entry; | |
struct clnp_fragl; | |
struct clnp_optidx; | |
struct isopcb; | |
struct snpa_hdr; | |
struct iso_ifaddr; | |
struct route_iso; | |
/* clnp_debug.c */ | |
char *clnp_hexp __P((char *, int, char *)); | |
char *clnp_iso_addrp __P((struct iso_addr *)); | |
char *clnp_saddr_isop __P((struct sockaddr_iso *)); | |
/* clnp_er.c */ | |
void clnp_er_input __P((struct mbuf *, struct iso_addr *, u_int)); | |
void clnp_discard __P((struct mbuf *, u_int)); | |
void clnp_emit_er __P((struct mbuf *, u_int)); | |
int clnp_er_index __P((u_int)); | |
int clnp_fragment __P((struct ifnet *, struct mbuf *, struct sockaddr *, | |
int, int, int, struct rtentry *)); | |
struct mbuf *clnp_reass __P((struct mbuf *, struct iso_addr *, | |
struct iso_addr *, struct clnp_segment *)); | |
int clnp_newpkt __P((struct mbuf *, struct iso_addr *, struct iso_addr *, | |
struct clnp_segment *)); | |
void clnp_insert_frag __P((struct clnp_fragl *, struct mbuf *, | |
struct clnp_segment *)); | |
struct mbuf *clnp_comp_pdu __P((struct clnp_fragl *)); | |
#ifdef TROLL | |
float troll_random __P((void)); | |
int troll_output __P((struct ifnet *, struct mbuf *, struct sockaddr *, | |
struct rtentry *)); | |
#endif | |
/* clnp_input.c */ | |
void clnp_init __P((void)); | |
void clnlintr __P((void)); | |
void clnp_input __P((struct mbuf *, ...)); | |
/* clnp_options.c */ | |
void clnp_update_srcrt __P((struct mbuf *, struct clnp_optidx *)); | |
void clnp_dooptions __P((struct mbuf *, struct clnp_optidx *, struct ifnet *, | |
struct iso_addr *)); | |
int clnp_set_opts __P((struct mbuf **, struct mbuf **)); | |
int clnp_opt_sanity __P((struct mbuf *, caddr_t, int, struct clnp_optidx *)); | |
/* clnp_output.c */ | |
int clnp_output __P((struct mbuf *, ...)); | |
void clnp_ctloutput __P((void)); | |
/* clnp_raw.c */ | |
void rclnp_input __P((struct mbuf *, ...)); | |
int rclnp_output __P((struct mbuf *, ...)); | |
int rclnp_ctloutput __P((int, struct socket *, int, int, struct mbuf **)); | |
int clnp_usrreq __P((struct socket *, int, struct mbuf *, struct mbuf *, | |
struct mbuf *, struct proc *)); | |
/* clnp_subr.c */ | |
struct mbuf *clnp_data_ck __P((struct mbuf *, int)); | |
caddr_t clnp_extract_addr __P((caddr_t, int, struct iso_addr *, | |
struct iso_addr *)); | |
int clnp_ours __P((struct iso_addr *)); | |
void clnp_forward __P((struct mbuf *, int, struct iso_addr *, | |
struct clnp_optidx *, int, struct snpa_hdr *)); | |
caddr_t clnp_insert_addr __P((caddr_t, struct iso_addr *, struct iso_addr *)); | |
int clnp_route __P((struct iso_addr *, struct route_iso *, int, | |
struct sockaddr **, struct iso_ifaddr **)); | |
int clnp_srcroute __P((struct mbuf *, struct clnp_optidx *, struct route_iso *, | |
struct sockaddr **, struct iso_ifaddr **, | |
struct iso_addr *)); | |
int clnp_echoreply __P((struct mbuf *, int, struct sockaddr_iso *, | |
struct sockaddr_iso *, struct clnp_optidx *)); | |
int clnp_badmtu __P((struct ifnet *, struct rtentry *, int, char *)); | |
void clnp_ypocb __P((caddr_t, caddr_t, u_int)); | |
/* clnp_timer.c */ | |
struct clnp_fragl *clnp_freefrags __P((struct clnp_fragl *)); | |
void clnp_slowtimo __P((void)); | |
void clnp_drain __P((void)); | |
#ifdef TROLL | |
struct troll trollctl; | |
#endif /* TROLL */ | |
#endif /* _KERNEL */ |