Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
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  *  struct atalk_iface - AppleTalk Interface
0019  *  @dev - Network device associated with this interface
0020  *  @address - Our address
0021  *  @status - What are we doing?
0022  *  @nets - Associated direct netrange
0023  *  @next - next element in the list of interfaces
0024  */
0025 struct atalk_iface {
0026     struct net_device   *dev;
0027     struct atalk_addr   address;
0028     int         status;
0029 #define ATIF_PROBE  1       /* Probing for an address */
0030 #define ATIF_PROBE_FAIL 2       /* Probe collided */
0031     struct atalk_netrange   nets;
0032     struct atalk_iface  *next;
0033 };
0034     
0035 struct atalk_sock {
0036     /* struct sock has to be the first member of atalk_sock */
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;   /* lower 10 bits are length, next 4 - 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     /* And netatalk apps expect to stick the type in themselves */
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 /* AppleTalk AARP headers */
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 /* Not specified - how long till we drop a resolved entry */
0097 #define AARP_EXPIRY_TIME    (5 * 60 * HZ)
0098 /* Size of hash table */
0099 #define AARP_HASH_SIZE      16
0100 /* Fast retransmission timer when resolving */
0101 #define AARP_TICK_TIME      (HZ / 5)
0102 /* Send 10 requests then give up (2 seconds) */
0103 #define AARP_RETRANSMIT_LIMIT   10
0104 /*
0105  * Some value bigger than total retransmit time + a bit for last reply to
0106  * appear and to stop continual requests
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 /* Inter module exports */
0114 
0115 /* Give a device find its atif control structure */
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 /* CONFIG_PROC_FS */
0185 
0186 #endif /* __LINUX_ATALK_H__ */