if_sbni.c (6cec9cad762b6476313fb1f8e931a1647822db6b) if_sbni.c (c8dfaf382fa6df9dc6fd1e1c3356e0c8bf607e6a)
1/*-
2 * Copyright (c) 1997-2001 Granch, Ltd. All rights reserved.
3 * Author: Denis I.Timofeev <timofeev@granch.ru>
4 *
5 * Redistributon and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

607
608 /*
609 * if CRC is right but framelen incorrect then transmitter
610 * error was occured... drop entire packet
611 */
612 } else if ((frame_ok = skip_tail(sc, framelen, crc)) != 0) {
613 sc->wait_frameno = 0;
614 sc->inppos = 0;
1/*-
2 * Copyright (c) 1997-2001 Granch, Ltd. All rights reserved.
3 * Author: Denis I.Timofeev <timofeev@granch.ru>
4 *
5 * Redistributon and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

607
608 /*
609 * if CRC is right but framelen incorrect then transmitter
610 * error was occured... drop entire packet
611 */
612 } else if ((frame_ok = skip_tail(sc, framelen, crc)) != 0) {
613 sc->wait_frameno = 0;
614 sc->inppos = 0;
615 sc->ifp->if_ierrors++;
615 if_inc_counter(sc->ifp, IFCOUNTER_IERRORS, 1);
616 /* now skip all frames until is_first != 0 */
617 }
618 } else
619 frame_ok = skip_tail(sc, framelen, crc);
620
621 if (is_first && !frame_ok) {
622 /*
623 * Frame has been violated, but we have stored
624 * is_first already... Drop entire packet.
625 */
626 sc->wait_frameno = 0;
616 /* now skip all frames until is_first != 0 */
617 }
618 } else
619 frame_ok = skip_tail(sc, framelen, crc);
620
621 if (is_first && !frame_ok) {
622 /*
623 * Frame has been violated, but we have stored
624 * is_first already... Drop entire packet.
625 */
626 sc->wait_frameno = 0;
627 sc->ifp->if_ierrors++;
627 if_inc_counter(sc->ifp, IFCOUNTER_IERRORS, 1);
628 }
629
630 return (frame_ok);
631}
632
633
634static __inline void send_complete(struct sbni_softc *);
635
636static __inline void
637send_complete(struct sbni_softc *sc)
638{
639 m_freem(sc->tx_buf_p);
640 sc->tx_buf_p = NULL;
628 }
629
630 return (frame_ok);
631}
632
633
634static __inline void send_complete(struct sbni_softc *);
635
636static __inline void
637send_complete(struct sbni_softc *sc)
638{
639 m_freem(sc->tx_buf_p);
640 sc->tx_buf_p = NULL;
641 sc->ifp->if_opackets++;
641 if_inc_counter(sc->ifp, IFCOUNTER_OPACKETS, 1);
642}
643
644
645static void
646interpret_ack(struct sbni_softc *sc, u_int ack)
647{
648 if (ack == FRAME_SENT_OK) {
649 sc->state &= ~FL_NEED_RESEND;

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

684 p = sc->rx_buf_p->m_data + sc->inppos;
685 sbni_insb(sc, p, framelen);
686 if (calc_crc32(crc, p, framelen) != CRC32_REMAINDER)
687 return (0);
688
689 sc->inppos += framelen - 4;
690 if (--sc->wait_frameno == 0) { /* last frame received */
691 indicate_pkt(sc);
642}
643
644
645static void
646interpret_ack(struct sbni_softc *sc, u_int ack)
647{
648 if (ack == FRAME_SENT_OK) {
649 sc->state &= ~FL_NEED_RESEND;

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

684 p = sc->rx_buf_p->m_data + sc->inppos;
685 sbni_insb(sc, p, framelen);
686 if (calc_crc32(crc, p, framelen) != CRC32_REMAINDER)
687 return (0);
688
689 sc->inppos += framelen - 4;
690 if (--sc->wait_frameno == 0) { /* last frame received */
691 indicate_pkt(sc);
692 sc->ifp->if_ipackets++;
692 if_inc_counter(sc->ifp, IFCOUNTER_IPACKETS, 1);
693 }
694
695 return (1);
696}
697
698
699/*
700 * Prepare to start output on adapter. Current priority must be set to splimp

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

750static void
751drop_xmit_queue(struct sbni_softc *sc)
752{
753 struct mbuf *m;
754
755 if (sc->tx_buf_p) {
756 m_freem(sc->tx_buf_p);
757 sc->tx_buf_p = NULL;
693 }
694
695 return (1);
696}
697
698
699/*
700 * Prepare to start output on adapter. Current priority must be set to splimp

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

750static void
751drop_xmit_queue(struct sbni_softc *sc)
752{
753 struct mbuf *m;
754
755 if (sc->tx_buf_p) {
756 m_freem(sc->tx_buf_p);
757 sc->tx_buf_p = NULL;
758 sc->ifp->if_oerrors++;
758 if_inc_counter(sc->ifp, IFCOUNTER_OERRORS, 1);
759 }
760
761 for (;;) {
762 IF_DEQUEUE(&sc->ifp->if_snd, m);
763 if (m == NULL)
764 break;
765 m_freem(m);
759 }
760
761 for (;;) {
762 IF_DEQUEUE(&sc->ifp->if_snd, m);
763 if (m == NULL)
764 break;
765 m_freem(m);
766 sc->ifp->if_oerrors++;
766 if_inc_counter(sc->ifp, IFCOUNTER_OERRORS, 1);
767 }
768
769 sc->tx_frameno = 0;
770 sc->framelen = 0;
771 sc->outpos = 0;
772 sc->state &= ~(FL_WAIT_ACK | FL_NEED_RESEND);
773 sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
774}

--- 504 unchanged lines hidden ---
767 }
768
769 sc->tx_frameno = 0;
770 sc->framelen = 0;
771 sc->outpos = 0;
772 sc->state &= ~(FL_WAIT_ACK | FL_NEED_RESEND);
773 sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
774}

--- 504 unchanged lines hidden ---