Deleted Added
sdiff udiff text old ( 93377 ) new ( 93379 )
full compact
1/*
2 * Copyright (c) 1995, 1996
3 * Matt Thomas <matt@3am-software.com>. All rights reserved.
4 * Copyright (c) 1982, 1989, 1993
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

--- 19 unchanged lines hidden (view full) ---

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 * from: if_ethersubr.c,v 1.5 1994/12/13 22:31:45 wollman Exp
36 * $FreeBSD: head/sys/net/if_fddisubr.c 93377 2002-03-29 09:52:01Z mdodd $
37 */
38
39#include "opt_atalk.h"
40#include "opt_inet.h"
41#include "opt_inet6.h"
42#include "opt_ipx.h"
43
44#include <sys/param.h>

--- 279 unchanged lines hidden (view full) ---

324 }
325 }
326
327 if (! IF_HANDOFF(&ifp->if_snd, m, ifp))
328 senderr(ENOBUFS);
329 return (error);
330
331bad:
332 if (m)
333 m_freem(m);
334 return (error);
335}
336
337/*
338 * Process a received FDDI packet;
339 * the packet is in the mbuf chain m without
340 * the fddi header, which is provided separately.
341 */
342void
343fddi_input(ifp, fh, m)
344 struct ifnet *ifp;
345 struct fddi_header *fh;
346 struct mbuf *m;
347{
348 struct ifqueue *inq;
349 struct llc *l;
350
351 if ((ifp->if_flags & IFF_UP) == 0) {
352 m_freem(m);
353 return;
354 }
355 getmicrotime(&ifp->if_lastchange);
356 ifp->if_ibytes += m->m_pkthdr.len + sizeof (*fh);
357 if (fh->fddi_dhost[0] & 1) {
358 if (bcmp((caddr_t)fddibroadcastaddr, (caddr_t)fh->fddi_dhost,
359 FDDI_ADDR_LEN) == 0)
360 m->m_flags |= M_BCAST;
361 else
362 m->m_flags |= M_MCAST;
363 ifp->if_imcasts++;
364 } else if ((ifp->if_flags & IFF_PROMISC)
365 && bcmp(IFP2AC(ifp)->ac_enaddr, (caddr_t)fh->fddi_dhost,
366 FDDI_ADDR_LEN) != 0) {
367 m_freem(m);
368 return;
369 }
370
371#ifdef M_LINK0
372 /*
373 * If this has a LLC priority of 0, then mark it so upper
374 * layers have a hint that it really came via a FDDI/Ethernet
375 * bridge.
376 */
377 if ((fh->fddi_fc & FDDIFC_LLC_PRIO7) == FDDIFC_LLC_PRIO0)
378 m->m_flags |= M_LINK0;
379#endif
380
381 l = mtod(m, struct llc *);
382
383 switch (l->llc_dsap) {
384#if defined(INET) || defined(INET6) || defined(NS) || defined(DECNET) || defined(IPX) || defined(NETATALK)
385 case LLC_SNAP_LSAP:
386 {
387 u_int16_t type;
388 if (l->llc_control != LLC_UI || l->llc_ssap != LLC_SNAP_LSAP)
389 goto dropanyway;
390#ifdef NETATALK
391 if (Bcmp(&(l->llc_snap.org_code)[0], at_org_code,
392 sizeof(at_org_code)) == 0 &&
393 ntohs(l->llc_snap.ether_type) == ETHERTYPE_AT) {
394 inq = &atintrq2;
395 m_adj(m, LLC_SNAPFRAMELEN);
396 schednetisr(NETISR_ATALK);
397 break;

--- 4 unchanged lines hidden (view full) ---

402 ntohs(l->llc_snap.ether_type) == ETHERTYPE_AARP) {
403 m_adj(m, LLC_SNAPFRAMELEN);
404 aarpinput(IFP2AC(ifp), m); /* XXX */
405 return;
406 }
407#endif /* NETATALK */
408 if (l->llc_snap.org_code[0] != 0 ||
409 l->llc_snap.org_code[1] != 0 ||
410 l->llc_snap.org_code[2] != 0)
411 goto dropanyway;
412
413 type = ntohs(l->llc_snap.ether_type);
414 m_adj(m, LLC_SNAPFRAMELEN);
415
416 switch (type) {
417#ifdef INET
418 case ETHERTYPE_IP:
419 if (ipflow_fastforward(m))

--- 75 unchanged lines hidden (view full) ---

495 struct ifnet *ifp;
496{
497 struct ifaddr *ifa;
498 struct sockaddr_dl *sdl;
499
500 ifp->if_type = IFT_FDDI;
501 ifp->if_addrlen = FDDI_ADDR_LEN;
502 ifp->if_hdrlen = 21;
503 ifp->if_mtu = FDDIMTU;
504 ifp->if_resolvemulti = fddi_resolvemulti;
505 ifp->if_baudrate = 100000000;
506#ifdef IFF_NOTRAILERS
507 ifp->if_flags |= IFF_NOTRAILERS;
508#endif
509 ifp->if_broadcastaddr = fddibroadcastaddr;
510 ifa = ifaddr_byindex(ifp->if_index);
511 sdl = (struct sockaddr_dl *)ifa->ifa_addr;
512 sdl->sdl_type = IFT_FDDI;
513 sdl->sdl_alen = ifp->if_addrlen;
514 bcopy(IFP2AC(ifp)->ac_enaddr, LLADDR(sdl), ifp->if_addrlen);
515}
516
517static int
518fddi_resolvemulti(ifp, llsa, sa)
519 struct ifnet *ifp;
520 struct sockaddr **llsa;
521 struct sockaddr *sa;
522{

--- 87 unchanged lines hidden ---