freebsd-skq/sys/netatalk/at_extern.h
Luigi Rizzo cd46a114fc This commit does two things:
1. rt_check() cleanup:
    rt_check() is only necessary for some address families to gain access
    to the corresponding arp entry, so call it only in/near the *resolve()
    routines where it is actually used -- at the moment this is
    arpresolve(), nd6_storelladdr() (the call is embedded here),
    and atmresolve() (the call is just before atmresolve to reduce
    the number of changes).
    This change will make it a lot easier to decouple the arp table
    from the routing table.

    There is an extra call to rt_check() in if_iso88025subr.c to
    determine the routing info length. I have left it alone for
    the time being.

    The interface of arpresolve() and nd6_storelladdr() now changes slightly:
     + the 'rtentry' parameter (really a hint from the upper level layer)
       is now passed unchanged from *_output(), so it becomes the route
       to the final destination and not to the gateway.
     + the routines will return 0 if resolution is possible, non-zero
       otherwise.
     + arpresolve() returns EWOULDBLOCK in case the mbuf is being held
       waiting for an arp reply -- in this case the error code is masked
       in the caller so the upper layer protocol will not see a failure.

2. arpcom untangling
    Where possible, use 'struct ifnet' instead of 'struct arpcom' variables,
    and use the IFP2AC macro to access arpcom fields.
    This mostly affects the netatalk code.

=== Detailed changes: ===
net/if_arcsubr.c
   rt_check() cleanup, remove a useless variable

net/if_atmsubr.c
   rt_check() cleanup

net/if_ethersubr.c
   rt_check() cleanup, arpcom untangling

net/if_fddisubr.c
   rt_check() cleanup, arpcom untangling

net/if_iso88025subr.c
   rt_check() cleanup

netatalk/aarp.c
   arpcom untangling, remove a block of duplicated code

netatalk/at_extern.h
   arpcom untangling

netinet/if_ether.c
   rt_check() cleanup (change arpresolve)

netinet6/nd6.c
   rt_check() cleanup (change nd6_storelladdr)
2004-04-25 09:24:52 +00:00

50 lines
1.2 KiB
C

/*
* $FreeBSD$
*/
struct mbuf;
struct sockaddr_at;
#ifdef _NET_IF_ARP_H_
extern timeout_t aarpprobe;
extern int aarpresolve (struct ifnet *,
struct mbuf *,
struct sockaddr_at *,
u_char *);
extern int at_broadcast (struct sockaddr_at *);
#endif
#ifdef _NETATALK_AARP_H_
extern void aarptfree (struct aarptab *);
#endif
struct ifnet;
struct thread;
struct socket;
extern void aarpintr (struct mbuf *);
extern void at1intr (struct mbuf *);
extern void at2intr (struct mbuf *);
extern void aarp_clean (void);
extern int at_control (struct socket *so,
u_long cmd,
caddr_t data,
struct ifnet *ifp,
struct thread *td);
extern u_short at_cksum (struct mbuf *m, int skip);
extern void ddp_init (void);
extern struct at_ifaddr *at_ifawithnet (struct sockaddr_at *);
#ifdef _NETATALK_DDP_VAR_H_
extern int ddp_output (struct mbuf *m, struct socket *so);
#endif
#if defined (_NETATALK_DDP_VAR_H_) && defined(_NETATALK_AT_VAR_H_)
extern struct ddpcb *ddp_search(struct sockaddr_at *,
struct sockaddr_at *,
struct at_ifaddr *);
#endif
#ifdef _NET_ROUTE_H_
int ddp_route(struct mbuf *m, struct route *ro);
#endif