freebsd_network: Reorder if_var.h slightly.
Some of the functions moved lower in this commit use functions that were previously defined below them, which was a warning in GCC but an error in Clang.
This commit is contained in:
@@ -624,167 +624,6 @@ do { \
|
|||||||
IFQ_PURGE(ifq); \
|
IFQ_PURGE(ifq); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static __inline int
|
|
||||||
drbr_enqueue(struct ifnet *ifp, struct buf_ring *br, struct mbuf *m)
|
|
||||||
{
|
|
||||||
int error = 0;
|
|
||||||
|
|
||||||
#ifdef ALTQ
|
|
||||||
if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
|
||||||
IFQ_ENQUEUE(&ifp->if_snd, m, error);
|
|
||||||
if (error)
|
|
||||||
if_inc_counter((ifp), IFCOUNTER_OQDROPS, 1);
|
|
||||||
return (error);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
error = buf_ring_enqueue(br, m);
|
|
||||||
if (error)
|
|
||||||
m_freem(m);
|
|
||||||
|
|
||||||
return (error);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline void
|
|
||||||
drbr_putback(struct ifnet *ifp, struct buf_ring *br, struct mbuf *_new)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The top of the list needs to be swapped
|
|
||||||
* for this one.
|
|
||||||
*/
|
|
||||||
#ifdef ALTQ
|
|
||||||
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
|
||||||
/*
|
|
||||||
* Peek in altq case dequeued it
|
|
||||||
* so put it back.
|
|
||||||
*/
|
|
||||||
IFQ_DRV_PREPEND(&ifp->if_snd, _new);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
buf_ring_putback_sc(br, _new);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline struct mbuf *
|
|
||||||
drbr_peek(struct ifnet *ifp, struct buf_ring *br)
|
|
||||||
{
|
|
||||||
#ifdef ALTQ
|
|
||||||
struct mbuf *m;
|
|
||||||
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
|
||||||
/*
|
|
||||||
* Pull it off like a dequeue
|
|
||||||
* since drbr_advance() does nothing
|
|
||||||
* for altq and drbr_putback() will
|
|
||||||
* use the old prepend function.
|
|
||||||
*/
|
|
||||||
IFQ_DEQUEUE(&ifp->if_snd, m);
|
|
||||||
return (m);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return (struct mbuf*)buf_ring_peek_clear_sc(br);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline void
|
|
||||||
drbr_flush(struct ifnet *ifp, struct buf_ring *br)
|
|
||||||
{
|
|
||||||
struct mbuf *m;
|
|
||||||
|
|
||||||
#ifdef ALTQ
|
|
||||||
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd))
|
|
||||||
IFQ_PURGE(&ifp->if_snd);
|
|
||||||
#endif
|
|
||||||
while ((m = (struct mbuf*)buf_ring_dequeue_sc(br)) != NULL)
|
|
||||||
m_freem(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline void
|
|
||||||
drbr_free(struct buf_ring *br, struct malloc_type *type)
|
|
||||||
{
|
|
||||||
|
|
||||||
drbr_flush(NULL, br);
|
|
||||||
buf_ring_free(br, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline struct mbuf *
|
|
||||||
drbr_dequeue(struct ifnet *ifp, struct buf_ring *br)
|
|
||||||
{
|
|
||||||
#ifdef ALTQ
|
|
||||||
struct mbuf *m;
|
|
||||||
|
|
||||||
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
|
||||||
IFQ_DEQUEUE(&ifp->if_snd, m);
|
|
||||||
return (m);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return (struct mbuf*)buf_ring_dequeue_sc(br);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline void
|
|
||||||
drbr_advance(struct ifnet *ifp, struct buf_ring *br)
|
|
||||||
{
|
|
||||||
#ifdef ALTQ
|
|
||||||
/* Nothing to do here since peek dequeues in altq case */
|
|
||||||
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd))
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
return (buf_ring_advance_sc(br));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static __inline struct mbuf *
|
|
||||||
drbr_dequeue_cond(struct ifnet *ifp, struct buf_ring *br,
|
|
||||||
int (*func) (struct mbuf *, void *), void *arg)
|
|
||||||
{
|
|
||||||
struct mbuf *m;
|
|
||||||
#ifdef ALTQ
|
|
||||||
if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
|
||||||
IFQ_LOCK(&ifp->if_snd);
|
|
||||||
IFQ_POLL_NOLOCK(&ifp->if_snd, m);
|
|
||||||
if (m != NULL && func(m, arg) == 0) {
|
|
||||||
IFQ_UNLOCK(&ifp->if_snd);
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
IFQ_DEQUEUE_NOLOCK(&ifp->if_snd, m);
|
|
||||||
IFQ_UNLOCK(&ifp->if_snd);
|
|
||||||
return (m);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
m = (struct mbuf*)buf_ring_peek(br);
|
|
||||||
if (m == NULL || func(m, arg) == 0)
|
|
||||||
return (NULL);
|
|
||||||
|
|
||||||
return (struct mbuf*)buf_ring_dequeue_sc(br);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline int
|
|
||||||
drbr_empty(struct ifnet *ifp, struct buf_ring *br)
|
|
||||||
{
|
|
||||||
#ifdef ALTQ
|
|
||||||
if (ALTQ_IS_ENABLED(&ifp->if_snd))
|
|
||||||
return (IFQ_IS_EMPTY(&ifp->if_snd));
|
|
||||||
#endif
|
|
||||||
return (buf_ring_empty(br));
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline int
|
|
||||||
drbr_needs_enqueue(struct ifnet *ifp, struct buf_ring *br)
|
|
||||||
{
|
|
||||||
#ifdef ALTQ
|
|
||||||
if (ALTQ_IS_ENABLED(&ifp->if_snd))
|
|
||||||
return (1);
|
|
||||||
#endif
|
|
||||||
return (!buf_ring_empty(br));
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline int
|
|
||||||
drbr_inuse(struct ifnet *ifp, struct buf_ring *br)
|
|
||||||
{
|
|
||||||
#ifdef ALTQ
|
|
||||||
if (ALTQ_IS_ENABLED(&ifp->if_snd))
|
|
||||||
return (ifp->if_snd.ifq_len);
|
|
||||||
#endif
|
|
||||||
return (buf_ring_count(br));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 72 was chosen below because it is the size of a TCP/IP
|
* 72 was chosen below because it is the size of a TCP/IP
|
||||||
* header (40) + the minimum mss (32).
|
* header (40) + the minimum mss (32).
|
||||||
@@ -1006,6 +845,167 @@ int ether_poll_register(poll_handler_t *h, struct ifnet *ifp);
|
|||||||
int ether_poll_deregister(struct ifnet *ifp);
|
int ether_poll_deregister(struct ifnet *ifp);
|
||||||
#endif /* DEVICE_POLLING */
|
#endif /* DEVICE_POLLING */
|
||||||
|
|
||||||
|
static __inline int
|
||||||
|
drbr_enqueue(struct ifnet *ifp, struct buf_ring *br, struct mbuf *m)
|
||||||
|
{
|
||||||
|
int error = 0;
|
||||||
|
|
||||||
|
#ifdef ALTQ
|
||||||
|
if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
||||||
|
IFQ_ENQUEUE(&ifp->if_snd, m, error);
|
||||||
|
if (error)
|
||||||
|
if_inc_counter((ifp), IFCOUNTER_OQDROPS, 1);
|
||||||
|
return (error);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
error = buf_ring_enqueue(br, m);
|
||||||
|
if (error)
|
||||||
|
m_freem(m);
|
||||||
|
|
||||||
|
return (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
drbr_putback(struct ifnet *ifp, struct buf_ring *br, struct mbuf *_new)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The top of the list needs to be swapped
|
||||||
|
* for this one.
|
||||||
|
*/
|
||||||
|
#ifdef ALTQ
|
||||||
|
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
||||||
|
/*
|
||||||
|
* Peek in altq case dequeued it
|
||||||
|
* so put it back.
|
||||||
|
*/
|
||||||
|
IFQ_DRV_PREPEND(&ifp->if_snd, _new);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
buf_ring_putback_sc(br, _new);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline struct mbuf *
|
||||||
|
drbr_peek(struct ifnet *ifp, struct buf_ring *br)
|
||||||
|
{
|
||||||
|
#ifdef ALTQ
|
||||||
|
struct mbuf *m;
|
||||||
|
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
||||||
|
/*
|
||||||
|
* Pull it off like a dequeue
|
||||||
|
* since drbr_advance() does nothing
|
||||||
|
* for altq and drbr_putback() will
|
||||||
|
* use the old prepend function.
|
||||||
|
*/
|
||||||
|
IFQ_DEQUEUE(&ifp->if_snd, m);
|
||||||
|
return (m);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return (struct mbuf*)buf_ring_peek_clear_sc(br);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
drbr_flush(struct ifnet *ifp, struct buf_ring *br)
|
||||||
|
{
|
||||||
|
struct mbuf *m;
|
||||||
|
|
||||||
|
#ifdef ALTQ
|
||||||
|
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd))
|
||||||
|
IFQ_PURGE(&ifp->if_snd);
|
||||||
|
#endif
|
||||||
|
while ((m = (struct mbuf*)buf_ring_dequeue_sc(br)) != NULL)
|
||||||
|
m_freem(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
drbr_free(struct buf_ring *br, struct malloc_type *type)
|
||||||
|
{
|
||||||
|
|
||||||
|
drbr_flush(NULL, br);
|
||||||
|
buf_ring_free(br, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline struct mbuf *
|
||||||
|
drbr_dequeue(struct ifnet *ifp, struct buf_ring *br)
|
||||||
|
{
|
||||||
|
#ifdef ALTQ
|
||||||
|
struct mbuf *m;
|
||||||
|
|
||||||
|
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
||||||
|
IFQ_DEQUEUE(&ifp->if_snd, m);
|
||||||
|
return (m);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return (struct mbuf*)buf_ring_dequeue_sc(br);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
drbr_advance(struct ifnet *ifp, struct buf_ring *br)
|
||||||
|
{
|
||||||
|
#ifdef ALTQ
|
||||||
|
/* Nothing to do here since peek dequeues in altq case */
|
||||||
|
if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
return (buf_ring_advance_sc(br));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static __inline struct mbuf *
|
||||||
|
drbr_dequeue_cond(struct ifnet *ifp, struct buf_ring *br,
|
||||||
|
int (*func) (struct mbuf *, void *), void *arg)
|
||||||
|
{
|
||||||
|
struct mbuf *m;
|
||||||
|
#ifdef ALTQ
|
||||||
|
if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
|
||||||
|
IFQ_LOCK(&ifp->if_snd);
|
||||||
|
IFQ_POLL_NOLOCK(&ifp->if_snd, m);
|
||||||
|
if (m != NULL && func(m, arg) == 0) {
|
||||||
|
IFQ_UNLOCK(&ifp->if_snd);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
IFQ_DEQUEUE_NOLOCK(&ifp->if_snd, m);
|
||||||
|
IFQ_UNLOCK(&ifp->if_snd);
|
||||||
|
return (m);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
m = (struct mbuf*)buf_ring_peek(br);
|
||||||
|
if (m == NULL || func(m, arg) == 0)
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
return (struct mbuf*)buf_ring_dequeue_sc(br);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline int
|
||||||
|
drbr_empty(struct ifnet *ifp, struct buf_ring *br)
|
||||||
|
{
|
||||||
|
#ifdef ALTQ
|
||||||
|
if (ALTQ_IS_ENABLED(&ifp->if_snd))
|
||||||
|
return (IFQ_IS_EMPTY(&ifp->if_snd));
|
||||||
|
#endif
|
||||||
|
return (buf_ring_empty(br));
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline int
|
||||||
|
drbr_needs_enqueue(struct ifnet *ifp, struct buf_ring *br)
|
||||||
|
{
|
||||||
|
#ifdef ALTQ
|
||||||
|
if (ALTQ_IS_ENABLED(&ifp->if_snd))
|
||||||
|
return (1);
|
||||||
|
#endif
|
||||||
|
return (!buf_ring_empty(br));
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline int
|
||||||
|
drbr_inuse(struct ifnet *ifp, struct buf_ring *br)
|
||||||
|
{
|
||||||
|
#ifdef ALTQ
|
||||||
|
if (ALTQ_IS_ENABLED(&ifp->if_snd))
|
||||||
|
return (ifp->if_snd.ifq_len);
|
||||||
|
#endif
|
||||||
|
return (buf_ring_count(br));
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _KERNEL */
|
#endif /* _KERNEL */
|
||||||
|
|
||||||
#endif /* _FBSD_COMPAT_NET_IF_VAR_H_ */
|
#endif /* _FBSD_COMPAT_NET_IF_VAR_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user