X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/5d5c5d0d5b79ade9a973d55186ffda2638ba2b6e..2d21ac55c334faf3a56e5634905ed6987fc787d4:/bsd/netat/ddp_lap.c diff --git a/bsd/netat/ddp_lap.c b/bsd/netat/ddp_lap.c index d0e4fb77c..c7e075c5a 100644 --- a/bsd/netat/ddp_lap.c +++ b/bsd/netat/ddp_lap.c @@ -1,31 +1,29 @@ /* * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_OSREFERENCE_HEADER_START@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. The rights granted to you under the - * License may not be used to create, or enable the creation or - * redistribution of, unlawful or unlicensed copies of an Apple operating - * system, or to circumvent, violate, or enable the circumvention or - * violation of, any terms of an Apple operating system software license - * agreement. - * - * Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and * limitations under the License. - * - * @APPLE_LICENSE_OSREFERENCE_HEADER_END@ + * + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * Copyright (c) 1988, 1989, 1993-1998 Apple Computer, Inc. @@ -74,6 +72,7 @@ #include #include +#include #include #include #include @@ -81,13 +80,14 @@ #include #include #include -#include #include #include #include #include #include #include +#include +#include #include @@ -136,19 +136,21 @@ extern at_ddp_stats_t at_ddp_stats; extern lck_mtx_t * atalk_mutex; /* protos */ -extern snmpAarpEnt_t * getAarp(int *); -extern void nbp_shutdown(), routershutdown(), ddp_brt_shutdown(); -extern void ddp_brt_init(), rtmp_init(), rtmp_input(); -extern rtmp_router_start(at_kern_err_t *); -static void getIfNames(at_ifnames_t *); -static void add_route(); -static int set_zones(); -void elap_offline(); -static int elap_online1(), re_aarp(); -int at_reg_mcast(), at_unreg_mcast(); -void AARPwakeup(), ZIPwakeup(); -static void elap_hangup(); -static getSnmpCfg(); +int rtmp_router_start(at_kern_err_t *); +static void add_route(RT_entry *); +void elap_offline(at_ifaddr_t *); +static int elap_online1(at_ifaddr_t *); +static void elap_online2(at_ifaddr_t *); + int elap_online3(at_ifaddr_t *); +static int re_aarp(at_ifaddr_t *); +static int getSnmpCfg(snmpCfg_t *); + +int routerStart(at_kern_err_t *); + +static int validate_msg_size(gbuf_t *, gref_t *, at_ifaddr_t **); +at_ifaddr_t *find_ifID(char *); +int lap_online( at_ifaddr_t *, at_if_cfg_t *cfgp); + at_ifaddr_t *find_ifID(if_name) char *if_name; @@ -174,7 +176,6 @@ static int validate_msg_size(m, gref, elapp) */ { register ioc_t *iocbp; - register at_if_cfg_t *cfgp; int i = 0, size = 1; *elapp = NULL; @@ -257,8 +258,9 @@ int lap_online(elapp, cfgp) elapp->flags |= ELAP_CFG_SEED; } - if (!DEFAULT_ZONE(&cfgp->zonename) && - (elapp->flags & ELAP_CFG_HOME) || MULTIHOME_MODE) { + /* (VL) !? */ + if ((!DEFAULT_ZONE(&cfgp->zonename) && + (elapp->flags & ELAP_CFG_HOME)) || MULTIHOME_MODE) { elapp->startup_zone = cfgp->zonename; } @@ -314,10 +316,12 @@ int elap_wput(gref, m) register ioc_t *iocbp; register at_if_cfg_t *cfgp; at_elap_stats_t *statsp; - int i; - int (*func)(); - gbuf_t *tmpm; - at_ifaddr_t *patp; + int i,j; + int size, totalsize = 0, tabsize; + gbuf_t *mn; /* new gbuf */ + gbuf_t *mo; /* old gbuf */ + gbuf_t *mt = NULL; /* temp */ + snmpNbpTable_t *nbp; switch (gbuf_type(m)) { @@ -466,7 +470,6 @@ int elap_wput(gref, m) kprintf("LAP_IOC_SNMP_GET_CFG\n"); #endif { - int i,size; snmpCfg_t snmp; i = *(int *)gbuf_rptr(gbuf_cont(m)); @@ -550,12 +553,6 @@ int elap_wput(gref, m) kprintf("LAP_IOC_SNMP_GET_ZIP\n"); #endif { /* matching brace NOT in this case */ - register int i,j; - register int size, total, tabsize; - gbuf_t *mn; /* new gbuf */ - gbuf_t *mo; /* old gbuf */ - gbuf_t *mt; /* temp */ - snmpNbpTable_t *nbp; i = *(int *)gbuf_rptr(gbuf_cont(m)); gbuf_freem(gbuf_cont(m)); @@ -586,11 +583,11 @@ int elap_wput(gref, m) } if (!mo) { /* if first new one */ mt = mn; - total = size; + totalsize = size; } else { gbuf_cont(mo) = mn; - total += size; + totalsize += size; } mo = mn; getZipTable((ZT_entry*)gbuf_rptr(mn),i,j); @@ -606,9 +603,9 @@ int elap_wput(gref, m) if (!tabsize) { dPrintf(D_M_ELAP,D_L_WARNING, ("elap_wput:snmp: empty zip table\n")); - total = 0; + totalsize = 0; } - *(int*)gbuf_rptr(gbuf_cont(m)) = total; /* return table size */ + *(int*)gbuf_rptr(gbuf_cont(m)) = totalsize; /* return table size */ gbuf_wset(gbuf_cont(m),sizeof(int)); iocbp->ioc_count = sizeof(int); ioc_ack(0, m, gref); @@ -651,11 +648,11 @@ int elap_wput(gref, m) } if (!mo) { /* if first new one */ mt = mn; - total = size; + totalsize = size; } else { gbuf_cont(mo) = mn; - total += size; + totalsize += size; } mo = mn; getRtmpTable((RT_entry*)gbuf_rptr(mn),i,j); @@ -669,8 +666,8 @@ int elap_wput(gref, m) break; } if (!tabsize) - total = 0; - *(int*)gbuf_rptr(gbuf_cont(m)) = total; /* return table size */ + totalsize = 0; + *(int*)gbuf_rptr(gbuf_cont(m)) = totalsize; /* return table size */ gbuf_wset(gbuf_cont(m),sizeof(int)); iocbp->ioc_count = sizeof(int); ioc_ack(0, m, gref); @@ -717,7 +714,7 @@ int elap_wput(gref, m) } if (!mo) { /* if first new one */ mt = mn; - total = size; + totalsize = size; nbp = (snmpNbpTable_t*)gbuf_rptr(mn); nbp->nbpt_entries = tabsize; nbp->nbpt_zone = ifID_home->ifZoneName; @@ -725,7 +722,7 @@ int elap_wput(gref, m) } else { gbuf_cont(mo) = mn; - total += size; + totalsize += size; getNbpTable((snmpNbpEntry_t *)gbuf_rptr(mn),i,j); } mo = mn; @@ -739,8 +736,8 @@ int elap_wput(gref, m) break; } if (!tabsize) - total = 0; - *(int*)gbuf_rptr(gbuf_cont(m)) = total; /* return table size */ + totalsize = 0; + *(int*)gbuf_rptr(gbuf_cont(m)) = totalsize; /* return table size */ gbuf_wset(gbuf_cont(m),sizeof(int)); iocbp->ioc_count = sizeof(int); ioc_ack(0, m, gref); @@ -776,6 +773,7 @@ int elap_wput(gref, m) /* Called directly by ddp/zip. */ +int elap_dataput(m, elapp, addr_flag, addr) register gbuf_t *m; register at_ifaddr_t *elapp; @@ -784,10 +782,8 @@ elap_dataput(m, elapp, addr_flag, addr) { register int size; int error = 0; - extern int zip_type_packet(); struct etalk_addr dest_addr; struct atalk_addr dest_at_addr; - extern gbuf_t *growmsg(); int loop = TRUE; /* flag to aarp to loopback (default) */ @@ -864,7 +860,7 @@ elap_dataput(m, elapp, addr_flag, addr) error = aarp_send_data(m, elapp, &dest_at_addr, loop); break; case ET_ADDR : - error = pat_output(elapp, m, &dest_addr, 0); + error = pat_output(elapp, m, (unsigned char *)&dest_addr, 0); break; } return (error); @@ -963,9 +959,11 @@ static void elap_online2(elapp) /* LD 081694: set the RTR_SEED_PORT flag for seed ports */ elapp->ifFlags |= RTR_SEED_PORT; } +#if DEBUG else dPrintf(D_M_ELAP,D_L_STARTUP_INFO, ("elap_online: it's a router, but non seed\n")); +#endif } if (elapp->flags & ELAP_CFG_ZONELESS) { @@ -1030,9 +1028,6 @@ void elap_offline(elapp) register at_ifaddr_t *elapp; { - void zip_sched_getnetinfo(); /* forward reference */ - int errno; - dPrintf(D_M_ELAP, D_L_SHUTDN_INFO, ("elap_offline:%s\n", elapp->ifName)); if (elapp->ifState != LAP_OFFLINE) { @@ -1099,7 +1094,6 @@ int ddp_shutdown(count_only) struct atp_state *atp, *atp_next; CCB *sp, *sp_next; gref_t *gref; - vm_offset_t temp_rcb_data, temp_state_data; int i, active_skts = 0; /* count of active pids for non-socketized AppleTalk protocols */ @@ -1424,6 +1418,8 @@ static unsigned char reverse_data[] = { addr[k] = reverse_data[addr[k]]; } +static int elap_trackMcast(at_ifaddr_t *, int, caddr_t); + static int elap_trackMcast(patp, func, addr) at_ifaddr_t *patp; int func; @@ -1503,7 +1499,7 @@ static int elap_trackMcast(patp, func, addr) } -static getSnmpCfg(snmp) +static int getSnmpCfg(snmp) snmpCfg_t *snmp; { int i; @@ -1517,7 +1513,7 @@ static getSnmpCfg(snmp) iifState != LAP_OFFLINE) { snmp->cfg_ifCnt++; - strncpy(ifc->ifc_name,elapp->ifName, sizeof(ifc->ifc_name)); + strlcpy(ifc->ifc_name,elapp->ifName, sizeof(ifc->ifc_name)); ifc->ifc_aarpSize = getAarpTableSize(i); ifc->ifc_addrSize = getPhysAddrSize(i); switch (elapp->aa_ifp->if_type) { @@ -1606,7 +1602,7 @@ int at_reg_mcast(ifID, data) *(unsigned*)data, (*(unsigned *)(data+2))&0x0000ffff, (unsigned)ifID)); - if (if_addmulti(nddp, &sdl, 0)) + if (if_addmulti(nddp, (struct sockaddr *)&sdl, 0)) return -1; } return 0; @@ -1645,7 +1641,7 @@ int at_unreg_mcast(ifID, data) (unsigned)ifID)); bzero(data, sizeof(struct etalk_addr)); - if (if_delmulti(nddp, &sdl)) + if (if_delmulti(nddp, (struct sockaddr *)&sdl)) return -1; } return 0;