0001
0002 #ifndef __LINUX_ATALK_H__
0003 #define __LINUX_ATALK_H__
0004
0005
0006 #include <net/sock.h>
0007 #include <uapi/linux/atalk.h>
0008
0009 struct atalk_route {
0010 struct net_device *dev;
0011 struct atalk_addr target;
0012 struct atalk_addr gateway;
0013 int flags;
0014 struct atalk_route *next;
0015 };
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 struct atalk_iface {
0026 struct net_device *dev;
0027 struct atalk_addr address;
0028 int status;
0029 #define ATIF_PROBE 1
0030 #define ATIF_PROBE_FAIL 2
0031 struct atalk_netrange nets;
0032 struct atalk_iface *next;
0033 };
0034
0035 struct atalk_sock {
0036
0037 struct sock sk;
0038 __be16 dest_net;
0039 __be16 src_net;
0040 unsigned char dest_node;
0041 unsigned char src_node;
0042 unsigned char dest_port;
0043 unsigned char src_port;
0044 };
0045
0046 static inline struct atalk_sock *at_sk(struct sock *sk)
0047 {
0048 return (struct atalk_sock *)sk;
0049 }
0050
0051 struct ddpehdr {
0052 __be16 deh_len_hops;
0053 __be16 deh_sum;
0054 __be16 deh_dnet;
0055 __be16 deh_snet;
0056 __u8 deh_dnode;
0057 __u8 deh_snode;
0058 __u8 deh_dport;
0059 __u8 deh_sport;
0060
0061 };
0062
0063 static __inline__ struct ddpehdr *ddp_hdr(struct sk_buff *skb)
0064 {
0065 return (struct ddpehdr *)skb_transport_header(skb);
0066 }
0067
0068
0069 struct elapaarp {
0070 __be16 hw_type;
0071 #define AARP_HW_TYPE_ETHERNET 1
0072 #define AARP_HW_TYPE_TOKENRING 2
0073 __be16 pa_type;
0074 __u8 hw_len;
0075 __u8 pa_len;
0076 #define AARP_PA_ALEN 4
0077 __be16 function;
0078 #define AARP_REQUEST 1
0079 #define AARP_REPLY 2
0080 #define AARP_PROBE 3
0081 __u8 hw_src[ETH_ALEN];
0082 __u8 pa_src_zero;
0083 __be16 pa_src_net;
0084 __u8 pa_src_node;
0085 __u8 hw_dst[ETH_ALEN];
0086 __u8 pa_dst_zero;
0087 __be16 pa_dst_net;
0088 __u8 pa_dst_node;
0089 } __attribute__ ((packed));
0090
0091 static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb)
0092 {
0093 return (struct elapaarp *)skb_transport_header(skb);
0094 }
0095
0096
0097 #define AARP_EXPIRY_TIME (5 * 60 * HZ)
0098
0099 #define AARP_HASH_SIZE 16
0100
0101 #define AARP_TICK_TIME (HZ / 5)
0102
0103 #define AARP_RETRANSMIT_LIMIT 10
0104
0105
0106
0107
0108 #define AARP_RESOLVE_TIME (10 * HZ)
0109
0110 extern struct datalink_proto *ddp_dl, *aarp_dl;
0111 extern int aarp_proto_init(void);
0112
0113
0114
0115
0116 #if IS_ENABLED(CONFIG_ATALK)
0117 static inline struct atalk_iface *atalk_find_dev(struct net_device *dev)
0118 {
0119 return dev->atalk_ptr;
0120 }
0121 #endif
0122
0123 extern struct atalk_addr *atalk_find_dev_addr(struct net_device *dev);
0124 extern struct net_device *atrtr_get_dev(struct atalk_addr *sa);
0125 extern int aarp_send_ddp(struct net_device *dev,
0126 struct sk_buff *skb,
0127 struct atalk_addr *sa, void *hwaddr);
0128 extern void aarp_device_down(struct net_device *dev);
0129 extern void aarp_probe_network(struct atalk_iface *atif);
0130 extern int aarp_proxy_probe_network(struct atalk_iface *atif,
0131 struct atalk_addr *sa);
0132 extern void aarp_proxy_remove(struct net_device *dev,
0133 struct atalk_addr *sa);
0134
0135 extern void aarp_cleanup_module(void);
0136
0137 extern struct hlist_head atalk_sockets;
0138 extern rwlock_t atalk_sockets_lock;
0139
0140 extern struct atalk_route *atalk_routes;
0141 extern rwlock_t atalk_routes_lock;
0142
0143 extern struct atalk_iface *atalk_interfaces;
0144 extern rwlock_t atalk_interfaces_lock;
0145
0146 extern struct atalk_route atrtr_default;
0147
0148 struct aarp_iter_state {
0149 int bucket;
0150 struct aarp_entry **table;
0151 };
0152
0153 extern const struct seq_operations aarp_seq_ops;
0154
0155 extern int sysctl_aarp_expiry_time;
0156 extern int sysctl_aarp_tick_time;
0157 extern int sysctl_aarp_retransmit_limit;
0158 extern int sysctl_aarp_resolve_time;
0159
0160 #ifdef CONFIG_SYSCTL
0161 extern int atalk_register_sysctl(void);
0162 extern void atalk_unregister_sysctl(void);
0163 #else
0164 static inline int atalk_register_sysctl(void)
0165 {
0166 return 0;
0167 }
0168 static inline void atalk_unregister_sysctl(void)
0169 {
0170 }
0171 #endif
0172
0173 #ifdef CONFIG_PROC_FS
0174 extern int atalk_proc_init(void);
0175 extern void atalk_proc_exit(void);
0176 #else
0177 static inline int atalk_proc_init(void)
0178 {
0179 return 0;
0180 }
0181 static inline void atalk_proc_exit(void)
0182 {
0183 }
0184 #endif
0185
0186 #endif