# #define ERR -1 #define TRUE 1 #define FALSE 0 struct que { int *q_head; int *q_tail; short q_cnt; }; /* Net inode */ struct netino { char nt_inode[14]; /* System inode space */ /* Not to exceed 18 chars */ char nt_flags; char nt_dev; /* Device address - offset into config table */ char nt_rte; /* First hop local dest */ char nt_prot; /* Internet protocol id */ union { struct in_name nt_inhost; /* Foreign host */ short nt_shost[2]; long nt_lhost; } nt_fhost; short nt_fskt; /* Foreign socket */ short nt_lskt; /* Local socket */ struct proc *nt_procp; /* Process table ptr */ struct netino *nt_forw; /* Next net inode */ struct netino *nt_back; }; /* Netino flags */ #define NINTRUP 01 /* Send SIGNINT to process when packet read */ #define NINTMISS 02 /* Pkt read when no process had SIGNINT enabled (i.e when NINTRUP not set) */ #define SIGNINT SIGAIO /* User net definition for open call */ struct netdf { short n_prot1; /* Internet id */ short n_prot2; /* Internet pkt protoc id */ short n_sfhost[2]; /* Foreign host name */ short n_fskt; /* Foreign socket */ short n_lskt; /* Local socket */ }; /* Host gate table structure */ struct gt_host { long gt_fhost; int gt_gate; }; /* Xmit packet header info */ struct pkt { struct net_hdr pk_net; struct inet_hdr pk_inet; char pk_inopt[IPOPTSZ]; }; /* Receive packet memory management */ struct rcvpktdir { short rd_flags; char *rd_begin; /* Begin addr of rcv pkt memory */ char *rd_end; /* End addr of rcv pkt memory */ struct rcvpkt *rd_head; /* Head of pkt queue in rcv memory */ struct rcvpkt *rd_tail; /* End of pkt queue in rcv memory */ struct rcvpkt *rd_rcvenb; /* Loc. into which rcv is enabled */ }; /* Receive packet structure */ struct rcvpkt { struct rcvpkt *rp_forw; /* Next rcv pkt */ struct rcvpkt *rp_back; /* Previous rcv pkt */ short rp_flags; short rp_len; /* No. bytes in packet */ struct netino *rp_inode; /* Net inode to which pkt belongs */ struct net_hdr rp_net; /* Local net header */ struct inet_hdr rp_inet; /* Inet header */ char rp_data[IPDATASZ]; }; #define RCVPKTSZ sizeof(struct rcvpkt) #define NETBYTES (NETHSIZ + IPHSIZ + IPDATASZ) #define RCVPKTHDSZ (RCVPKTSZ - NETBYTES) /* Rcvpkt flags */ #define N_LOCK 01 /* Pkt being copied into user buffer, */ /* do not drop it */ #define N_WANTED 02 /* Pkt space wh. is locked is needed for rcv space */ #define N_FFRAG 04 /* Pkt incomplete, reassembly being done into this pkt */ #define N_FRAG 010 /* Pkt is non-first fragment, it is waiting for its sibling first fragment into which it will be copied */ /* Rcv packet error codes */ #define ENETLEN 1 /* Weird packet length from net */ #define ENETPROT 2 /* Bad protocol id form net */ #define EIPHLEN 3 /* Bad inet header length */ #define EIPLEN 4 /* Bad inet packet length */ #define EIPCKSUM 5 /* Bad inet chksum */ #define EIPDEST 6 /* Inet packet not dest. for mymach */ #define EIPFRAG 7 /* Inet fragment */ #define EIPMATCH 8 /* No net connection found for rcv. pkt */ #define DROPP 9 /* Packet dropped from rcv pkt memory because need space to enable new rcv */ #define PROGERR 10 /* Program error */ #define MAXNERR PROGERR extern short netdev; extern long mymach; extern struct que neti_que; extern struct rcvpktdir rcvpktdir;