void icmp_init() { int i; icmp_port_t *icmp_port; assert (BUF_S >= sizeof (nwio_ipopt_t)); for (i= 0, icmp_port= icmp_port_table; i<ip_conf_nr; i++, icmp_port++) { icmp_port->icp_flags= ICPF_EMPTY; icmp_port->icp_state= ICPS_BEGIN; icmp_port->icp_ipport= i; icmp_port->icp_rate_count= 0; icmp_port->icp_rate_report= ICMP_MAX_RATE; icmp_port->icp_rate_lasttime= 0; ev_init(&icmp_port->icp_event); } #ifndef BUF_CONSISTENCY_CHECK bf_logon(icmp_buffree); #else bf_logon(icmp_buffree, icmp_bufcheck); #endif for (i= 0, icmp_port= icmp_port_table; i<ip_conf_nr; i++, icmp_port++) { icmp_main (icmp_port); } }
PUBLIC void icmp_init() { int i; icmp_port_t *icmp_port; assert (BUF_S >= sizeof (nwio_ipopt_t)); for (i= 0, icmp_port= icmp_port_table; i<ICMP_PORT_NR; i++, icmp_port++) { icmp_port->icp_flags= ICPF_EMPTY; icmp_port->icp_state= ICPS_BEGIN; icmp_port->icp_ipport= i; } #ifndef BUF_CONSISTENCY_CHECK bf_logon(icmp_buffree); #else bf_logon(icmp_buffree, icmp_bufcheck); #endif for (i= 0, icmp_port= icmp_port_table; i<ICMP_PORT_NR; i++, icmp_port++) { icmp_main (icmp_port); } }
PUBLIC void arp_init() { arp_port_t *arp_port; arp_cache_t *cache; int i; assert (BUF_S >= sizeof(struct nwio_ethstat)); assert (BUF_S >= sizeof(struct nwio_ethopt)); assert (BUF_S >= sizeof(arp46_t)); for (i=0, arp_port= arp_port_table; i<eth_conf_nr; i++, arp_port++) { arp_port->ap_state= APS_ERROR; /* Mark all ports as * unavailable */ } cache= arp_cache; for (i=0; i<arp_cache_nr; i++, cache++) { cache->ac_state= ACS_UNUSED; cache->ac_flags= ACF_EMPTY; cache->ac_expire= 0; cache->ac_lastuse= 0; } #ifndef BUF_CONSISTENCY_CHECK bf_logon(arp_buffree); #else bf_logon(arp_buffree, arp_bufcheck); #endif }
PUBLIC void udp_init() { udp_fd_t *udp_fd; udp_port_t *udp_port; int i, result; assert (BUF_S >= sizeof(struct nwio_ipopt)); assert (BUF_S >= sizeof(struct nwio_ipconf)); assert (BUF_S >= sizeof(struct nwio_udpopt)); assert (BUF_S >= sizeof(struct udp_io_hdr)); assert (UDP_HDR_SIZE == sizeof(udp_hdr_t)); assert (UDP_IO_HDR_SIZE == sizeof(udp_io_hdr_t)); for (i= 0, udp_fd= udp_fd_table; i<UDP_FD_NR; i++, udp_fd++) { udp_fd->uf_flags= UFF_EMPTY; udp_fd->uf_rdbuf_head= NULL; } #ifndef BUF_CONSISTENCY_CHECK bf_logon(udp_buffree); #else bf_logon(udp_buffree, udp_bufcheck); #endif for (i= 0, udp_port= udp_port_table; i<UDP_PORT_NR; i++, udp_port++) { if (i == udp_conf_nr) { printf("udp_init: more ports than configurations\n"); break; } udp_port->up_minor= udp_conf[i].uc_minor; udp_port->up_ipdev= udp_conf[i].uc_port; udp_port->up_flags= UPF_EMPTY; udp_port->up_state= UPS_EMPTY; udp_port->up_next_fd= udp_fd_table; udp_port->up_write_fd= NULL; result= sr_add_minor (udp_port->up_minor, udp_port-udp_port_table, udp_open, udp_close, udp_read, udp_write, udp_ioctl, udp_cancel); assert (result >= 0); udp_main(udp_port); } }
void udp_init() { udp_fd_t *udp_fd; udp_port_t *udp_port; int i, j, ifno; assert (BUF_S >= sizeof(struct nwio_ipopt)); assert (BUF_S >= sizeof(struct nwio_ipconf)); assert (BUF_S >= sizeof(struct nwio_udpopt)); assert (BUF_S >= sizeof(struct udp_io_hdr)); assert (UDP_HDR_SIZE == sizeof(udp_hdr_t)); assert (UDP_IO_HDR_SIZE == sizeof(udp_io_hdr_t)); for (i= 0, udp_fd= udp_fd_table; i<UDP_FD_NR; i++, udp_fd++) { udp_fd->uf_flags= UFF_EMPTY; udp_fd->uf_rdbuf_head= NULL; } #ifndef BUF_CONSISTENCY_CHECK bf_logon(udp_buffree); #else bf_logon(udp_buffree, udp_bufcheck); #endif for (i= 0, udp_port= udp_port_table; i<udp_conf_nr; i++, udp_port++) { udp_port->up_ipdev= udp_conf[i].uc_port; udp_port->up_flags= UPF_EMPTY; udp_port->up_state= UPS_EMPTY; udp_port->up_next_fd= udp_fd_table; udp_port->up_write_fd= NULL; udp_port->up_wr_pack= NULL; udp_port->up_port_any= NULL; for (j= 0; j<UDP_PORT_HASH_NR; j++) udp_port->up_port_hash[j]= NULL; ifno= ip_conf[udp_port->up_ipdev].ic_ifno; sr_add_minor(if2minor(ifno, UDP_DEV_OFF), i, udp_open, udp_close, udp_read, udp_write, udp_ioctl, udp_cancel, udp_select); udp_main(udp_port); } }
PUBLIC void udp_init() { udp_fd_t *udp_fd; udp_port_t *udp_port; int i, result; assert (BUF_S >= sizeof(struct nwio_ipopt)); assert (BUF_S >= sizeof(struct nwio_ipconf)); assert (BUF_S >= sizeof(struct nwio_udpopt)); assert (BUF_S >= sizeof(struct udp_io_hdr)); assert (UDP_HDR_SIZE == sizeof(udp_hdr_t)); assert (UDP_IO_HDR_SIZE == sizeof(udp_io_hdr_t)); udp_port_table[0].up_minor= UDP_DEV0; udp_port_table[0].up_ipdev= IP0; for (i= 0, udp_fd= udp_fd_table; i<UDP_FD_NR; i++, udp_fd++) { udp_fd->uf_flags= UFF_EMPTY; } bf_logon(udp_buffree); for (i= 0, udp_port= udp_port_table; i<UDP_PORT_NR; i++, udp_port++) { udp_port->up_flags= UPF_EMPTY; udp_port->up_state= UPS_EMPTY; udp_port->up_next_fd= udp_fd_table; udp_port->up_write_fd= NULL; result= sr_add_minor (udp_port->up_minor, udp_port-udp_port_table, udp_open, udp_close, udp_read, udp_write, udp_ioctl, udp_cancel); assert (result >= 0); udp_main(udp_port); } }
PUBLIC void ip_init() { int i, j, result; ip_ass_t *ip_ass; ip_fd_t *ip_fd; ip_port_t *ip_port; struct ip_conf *icp; assert (BUF_S >= sizeof(struct nwio_ethopt)); assert (BUF_S >= IP_MAX_HDR_SIZE + ETH_HDR_SIZE); assert (BUF_S >= sizeof(nwio_ipopt_t)); assert (BUF_S >= sizeof(nwio_route_t)); for (i=0, ip_ass= ip_ass_table; i<IP_ASS_NR; i++, ip_ass++) { ip_ass->ia_frags= 0; ip_ass->ia_first_time= 0; ip_ass->ia_port= 0; } for (i=0, ip_fd= ip_fd_table; i<IP_FD_NR; i++, ip_fd++) { ip_fd->if_flags= IFF_EMPTY; ip_fd->if_rdbuf_head= 0; } for (i=0, ip_port= ip_port_table, icp= ip_conf; i<ip_conf_nr; i++, ip_port++, icp++) { ip_port->ip_port= i; ip_port->ip_flags= IPF_EMPTY; ip_port->ip_dev_main= (ip_dev_t)ip_bad_callback; ip_port->ip_dev_set_ipaddr= (ip_dev_t)ip_bad_callback; ip_port->ip_dev_send= (ip_dev_send_t)ip_bad_callback; ip_port->ip_dl_type= icp->ic_devtype; ip_port->ip_mtu= IP_DEF_MTU; ip_port->ip_mtu_max= IP_MAX_PACKSIZE; switch(ip_port->ip_dl_type) { case IPDL_ETH: ip_port->ip_dl.dl_eth.de_port= icp->ic_port; result= ipeth_init(ip_port); if (result == -1) continue; assert(result == NW_OK); break; case IPDL_PSIP: ip_port->ip_dl.dl_ps.ps_port= icp->ic_port; result= ipps_init(ip_port); if (result == -1) continue; assert(result == NW_OK); break; default: ip_panic(( "unknown ip_dl_type %d", ip_port->ip_dl_type )); break; } ip_port->ip_loopb_head= NULL; ip_port->ip_loopb_tail= NULL; ev_init(&ip_port->ip_loopb_event); ip_port->ip_routeq_head= NULL; ip_port->ip_routeq_tail= NULL; ev_init(&ip_port->ip_routeq_event); ip_port->ip_flags |= IPF_CONFIGURED; ip_port->ip_proto_any= NULL; for (j= 0; j<IP_PROTO_HASH_NR; j++) ip_port->ip_proto[j]= NULL; } #ifndef BUF_CONSISTENCY_CHECK bf_logon(ip_buffree); #else bf_logon(ip_buffree, ip_bufcheck); #endif icmp_init(); ipr_init(); for (i=0, ip_port= ip_port_table; i<ip_conf_nr; i++, ip_port++) { if (!(ip_port->ip_flags & IPF_CONFIGURED)) continue; ip_port->ip_frame_id= (u16_t)get_time(); sr_add_minor(if2minor(ip_conf[i].ic_ifno, IP_DEV_OFF), i, ip_open, ip_close, ip_read, ip_write, ip_ioctl, ip_cancel, ip_select); (*ip_port->ip_dev_main)(ip_port); } }