![Eric W. Biederman](/assets/img/avatar_default.png)
Other users users of the neighbour table use neigh->output as the method to decided when and which link-layer header to place on a packet. DECnet has been using neigh->output to decide which DECnet headers to place on a packet depending which neighbour the packet is destined for. The DECnet usage isn't totally wrong but it can run into problems if the neighbour output function is run for a second time as the teql driver and the bridge netfilter code can do. Therefore to avoid pathologic problems later down the line and make the neighbour code easier to understand by refactoring the decnet output code to only use a neighbour method to add a link layer header to a packet. This is done by moving the neigbhour operations lookup from dn_to_neigh_output to dn_neigh_output_packet. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
30 lines
827 B
C
30 lines
827 B
C
#ifndef _NET_DN_NEIGH_H
|
|
#define _NET_DN_NEIGH_H
|
|
|
|
/*
|
|
* The position of the first two fields of
|
|
* this structure are critical - SJW
|
|
*/
|
|
struct dn_neigh {
|
|
struct neighbour n;
|
|
__le16 addr;
|
|
unsigned long flags;
|
|
#define DN_NDFLAG_R1 0x0001 /* Router L1 */
|
|
#define DN_NDFLAG_R2 0x0002 /* Router L2 */
|
|
#define DN_NDFLAG_P3 0x0004 /* Phase III Node */
|
|
unsigned long blksize;
|
|
__u8 priority;
|
|
};
|
|
|
|
void dn_neigh_init(void);
|
|
void dn_neigh_cleanup(void);
|
|
int dn_neigh_router_hello(struct sk_buff *skb);
|
|
int dn_neigh_endnode_hello(struct sk_buff *skb);
|
|
void dn_neigh_pointopoint_hello(struct sk_buff *skb);
|
|
int dn_neigh_elist(struct net_device *dev, unsigned char *ptr, int n);
|
|
int dn_to_neigh_output(struct sk_buff *skb);
|
|
|
|
extern struct neigh_table dn_neigh_table;
|
|
|
|
#endif /* _NET_DN_NEIGH_H */
|