cd46a114fc
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)
50 lines
1.2 KiB
C
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
|
|
|
|
|