1 #ifndef __LINUX_ATALK_H__ 2 #define __LINUX_ATALK_H__ 3 4 5 #include <net/sock.h> 6 #include <uapi/linux/atalk.h> 7 8 struct atalk_route { 9 struct net_device *dev; 10 struct atalk_addr target; 11 struct atalk_addr gateway; 12 int flags; 13 struct atalk_route *next; 14 }; 15 16 /** 17 * struct atalk_iface - AppleTalk Interface 18 * @dev - Network device associated with this interface 19 * @address - Our address 20 * @status - What are we doing? 21 * @nets - Associated direct netrange 22 * @next - next element in the list of interfaces 23 */ 24 struct atalk_iface { 25 struct net_device *dev; 26 struct atalk_addr address; 27 int status; 28 #define ATIF_PROBE 1 /* Probing for an address */ 29 #define ATIF_PROBE_FAIL 2 /* Probe collided */ 30 struct atalk_netrange nets; 31 struct atalk_iface *next; 32 }; 33 34 struct atalk_sock { 35 /* struct sock has to be the first member of atalk_sock */ 36 struct sock sk; 37 __be16 dest_net; 38 __be16 src_net; 39 unsigned char dest_node; 40 unsigned char src_node; 41 unsigned char dest_port; 42 unsigned char src_port; 43 }; 44 at_sk(struct sock * sk)45static inline struct atalk_sock *at_sk(struct sock *sk) 46 { 47 return (struct atalk_sock *)sk; 48 } 49 50 struct ddpehdr { 51 __be16 deh_len_hops; /* lower 10 bits are length, next 4 - hops */ 52 __be16 deh_sum; 53 __be16 deh_dnet; 54 __be16 deh_snet; 55 __u8 deh_dnode; 56 __u8 deh_snode; 57 __u8 deh_dport; 58 __u8 deh_sport; 59 /* And netatalk apps expect to stick the type in themselves */ 60 }; 61 ddp_hdr(struct sk_buff * skb)62static __inline__ struct ddpehdr *ddp_hdr(struct sk_buff *skb) 63 { 64 return (struct ddpehdr *)skb_transport_header(skb); 65 } 66 67 /* AppleTalk AARP headers */ 68 struct elapaarp { 69 __be16 hw_type; 70 #define AARP_HW_TYPE_ETHERNET 1 71 #define AARP_HW_TYPE_TOKENRING 2 72 __be16 pa_type; 73 __u8 hw_len; 74 __u8 pa_len; 75 #define AARP_PA_ALEN 4 76 __be16 function; 77 #define AARP_REQUEST 1 78 #define AARP_REPLY 2 79 #define AARP_PROBE 3 80 __u8 hw_src[ETH_ALEN]; 81 __u8 pa_src_zero; 82 __be16 pa_src_net; 83 __u8 pa_src_node; 84 __u8 hw_dst[ETH_ALEN]; 85 __u8 pa_dst_zero; 86 __be16 pa_dst_net; 87 __u8 pa_dst_node; 88 } __attribute__ ((packed)); 89 aarp_hdr(struct sk_buff * skb)90static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb) 91 { 92 return (struct elapaarp *)skb_transport_header(skb); 93 } 94 95 /* Not specified - how long till we drop a resolved entry */ 96 #define AARP_EXPIRY_TIME (5 * 60 * HZ) 97 /* Size of hash table */ 98 #define AARP_HASH_SIZE 16 99 /* Fast retransmission timer when resolving */ 100 #define AARP_TICK_TIME (HZ / 5) 101 /* Send 10 requests then give up (2 seconds) */ 102 #define AARP_RETRANSMIT_LIMIT 10 103 /* 104 * Some value bigger than total retransmit time + a bit for last reply to 105 * appear and to stop continual requests 106 */ 107 #define AARP_RESOLVE_TIME (10 * HZ) 108 109 extern struct datalink_proto *ddp_dl, *aarp_dl; 110 extern void aarp_proto_init(void); 111 112 /* Inter module exports */ 113 114 /* Give a device find its atif control structure */ atalk_find_dev(struct net_device * dev)115static inline struct atalk_iface *atalk_find_dev(struct net_device *dev) 116 { 117 return dev->atalk_ptr; 118 } 119 120 extern struct atalk_addr *atalk_find_dev_addr(struct net_device *dev); 121 extern struct net_device *atrtr_get_dev(struct atalk_addr *sa); 122 extern int aarp_send_ddp(struct net_device *dev, 123 struct sk_buff *skb, 124 struct atalk_addr *sa, void *hwaddr); 125 extern void aarp_device_down(struct net_device *dev); 126 extern void aarp_probe_network(struct atalk_iface *atif); 127 extern int aarp_proxy_probe_network(struct atalk_iface *atif, 128 struct atalk_addr *sa); 129 extern void aarp_proxy_remove(struct net_device *dev, 130 struct atalk_addr *sa); 131 132 extern void aarp_cleanup_module(void); 133 134 extern struct hlist_head atalk_sockets; 135 extern rwlock_t atalk_sockets_lock; 136 137 extern struct atalk_route *atalk_routes; 138 extern rwlock_t atalk_routes_lock; 139 140 extern struct atalk_iface *atalk_interfaces; 141 extern rwlock_t atalk_interfaces_lock; 142 143 extern struct atalk_route atrtr_default; 144 145 extern const struct file_operations atalk_seq_arp_fops; 146 147 extern int sysctl_aarp_expiry_time; 148 extern int sysctl_aarp_tick_time; 149 extern int sysctl_aarp_retransmit_limit; 150 extern int sysctl_aarp_resolve_time; 151 152 #ifdef CONFIG_SYSCTL 153 extern void atalk_register_sysctl(void); 154 extern void atalk_unregister_sysctl(void); 155 #else 156 #define atalk_register_sysctl() do { } while(0) 157 #define atalk_unregister_sysctl() do { } while(0) 158 #endif 159 160 #ifdef CONFIG_PROC_FS 161 extern int atalk_proc_init(void); 162 extern void atalk_proc_exit(void); 163 #else 164 #define atalk_proc_init() ({ 0; }) 165 #define atalk_proc_exit() do { } while(0) 166 #endif /* CONFIG_PROC_FS */ 167 168 #endif /* __LINUX_ATALK_H__ */ 169