#ifndef _AX25_H
#define _AX25_H
#include <linux/ax25.h>
#include <linux/spinlock.h>
#include <linux/timer.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <linux/refcount.h>
#include <net/neighbour.h>
#include <net/sock.h>
#include <linux/seq_file.h>
#define AX25_T1CLAMPLO …
#define AX25_T1CLAMPHI …
#define AX25_BPQ_HEADER_LEN …
#define AX25_KISS_HEADER_LEN …
#define AX25_HEADER_LEN …
#define AX25_ADDR_LEN …
#define AX25_DIGI_HEADER_LEN …
#define AX25_MAX_HEADER_LEN …
#define AX25_P_ROSE …
#define AX25_P_VJCOMP …
#define AX25_P_VJUNCOMP …
#define AX25_P_SEGMENT …
#define AX25_P_TEXNET …
#define AX25_P_LQ …
#define AX25_P_ATALK …
#define AX25_P_ATALK_ARP …
#define AX25_P_IP …
#define AX25_P_ARP …
#define AX25_P_FLEXNET …
#define AX25_P_NETROM …
#define AX25_P_TEXT …
#define AX25_SEG_REM …
#define AX25_SEG_FIRST …
#define AX25_CBIT …
#define AX25_EBIT …
#define AX25_HBIT …
#define AX25_SSSID_SPARE …
#define AX25_ESSID_SPARE …
#define AX25_DAMA_FLAG …
#define AX25_COND_ACK_PENDING …
#define AX25_COND_REJECT …
#define AX25_COND_PEER_RX_BUSY …
#define AX25_COND_OWN_RX_BUSY …
#define AX25_COND_DAMA_MODE …
#ifndef _LINUX_NETDEVICE_H
#include <linux/netdevice.h>
#endif
#define AX25_I …
#define AX25_S …
#define AX25_RR …
#define AX25_RNR …
#define AX25_REJ …
#define AX25_U …
#define AX25_SABM …
#define AX25_SABME …
#define AX25_DISC …
#define AX25_DM …
#define AX25_UA …
#define AX25_FRMR …
#define AX25_UI …
#define AX25_XID …
#define AX25_TEST …
#define AX25_PF …
#define AX25_EPF …
#define AX25_ILLEGAL …
#define AX25_POLLOFF …
#define AX25_POLLON …
#define AX25_COMMAND …
#define AX25_RESPONSE …
enum { … };
#define AX25_MODULUS …
#define AX25_EMODULUS …
enum { … };
enum { … };
#define AX25_DEF_IPDEFMODE …
#define AX25_DEF_AXDEFMODE …
#define AX25_DEF_BACKOFF …
#define AX25_DEF_CONMODE …
#define AX25_DEF_WINDOW …
#define AX25_DEF_EWINDOW …
#define AX25_DEF_T1 …
#define AX25_DEF_T2 …
#define AX25_DEF_T3 …
#define AX25_DEF_N2 …
#define AX25_DEF_IDLE …
#define AX25_DEF_PACLEN …
#define AX25_DEF_PROTOCOL …
#define AX25_DEF_DS_TIMEOUT …
ax25_uid_assoc;
#define ax25_uid_for_each(__ax25, list) …
#define ax25_uid_hold(ax25) …
static inline void ax25_uid_put(ax25_uid_assoc *assoc)
{ … }
ax25_digi;
ax25_route;
void __ax25_put_route(ax25_route *ax25_rt);
extern rwlock_t ax25_route_lock;
static inline void ax25_route_lock_use(void)
{ … }
static inline void ax25_route_lock_unuse(void)
{ … }
ax25_dama_info;
struct ctl_table;
ax25_dev;
ax25_cb;
struct ax25_sock { … };
#define ax25_sk(ptr) …
static inline struct ax25_cb *sk_to_ax25(const struct sock *sk)
{ … }
#define ax25_for_each(__ax25, list) …
#define ax25_cb_hold(__ax25) …
static __inline__ void ax25_cb_put(ax25_cb *ax25)
{ … }
static inline void ax25_dev_hold(ax25_dev *ax25_dev)
{ … }
static inline void ax25_dev_put(ax25_dev *ax25_dev)
{ … }
static inline __be16 ax25_type_trans(struct sk_buff *skb, struct net_device *dev)
{ … }
extern struct hlist_head ax25_list;
extern spinlock_t ax25_list_lock;
void ax25_cb_add(ax25_cb *);
struct sock *ax25_find_listener(ax25_address *, int, struct net_device *, int);
struct sock *ax25_get_socket(ax25_address *, ax25_address *, int);
ax25_cb *ax25_find_cb(const ax25_address *, ax25_address *, ax25_digi *,
struct net_device *);
void ax25_send_to_raw(ax25_address *, struct sk_buff *, int);
void ax25_destroy_socket(ax25_cb *);
ax25_cb * __must_check ax25_create_cb(void);
void ax25_fillin_cb(ax25_cb *, ax25_dev *);
struct sock *ax25_make_new(struct sock *, struct ax25_dev *);
extern const ax25_address ax25_bcast;
extern const ax25_address ax25_defaddr;
extern const ax25_address null_ax25_address;
char *ax2asc(char *buf, const ax25_address *);
void asc2ax(ax25_address *addr, const char *callsign);
int ax25cmp(const ax25_address *, const ax25_address *);
int ax25digicmp(const ax25_digi *, const ax25_digi *);
const unsigned char *ax25_addr_parse(const unsigned char *, int,
ax25_address *, ax25_address *, ax25_digi *, int *, int *);
int ax25_addr_build(unsigned char *, const ax25_address *,
const ax25_address *, const ax25_digi *, int, int);
int ax25_addr_size(const ax25_digi *);
void ax25_digi_invert(const ax25_digi *, ax25_digi *);
extern spinlock_t ax25_dev_lock;
#if IS_ENABLED(CONFIG_AX25)
static inline ax25_dev *ax25_dev_ax25dev(struct net_device *dev)
{ … }
#endif
ax25_dev *ax25_addr_ax25dev(ax25_address *);
void ax25_dev_device_up(struct net_device *);
void ax25_dev_device_down(struct net_device *);
int ax25_fwd_ioctl(unsigned int, struct ax25_fwd_struct *);
struct net_device *ax25_fwd_dev(struct net_device *);
void ax25_dev_free(void);
int ax25_ds_frame_in(ax25_cb *, struct sk_buff *, int);
void ax25_ds_nr_error_recovery(ax25_cb *);
void ax25_ds_enquiry_response(ax25_cb *);
void ax25_ds_establish_data_link(ax25_cb *);
void ax25_dev_dama_off(ax25_dev *);
void ax25_dama_on(ax25_cb *);
void ax25_dama_off(ax25_cb *);
void ax25_ds_setup_timer(ax25_dev *);
void ax25_ds_set_timer(ax25_dev *);
void ax25_ds_del_timer(ax25_dev *);
void ax25_ds_timer(ax25_cb *);
void ax25_ds_t1_timeout(ax25_cb *);
void ax25_ds_heartbeat_expiry(ax25_cb *);
void ax25_ds_t3timer_expiry(ax25_cb *);
void ax25_ds_idletimer_expiry(ax25_cb *);
struct ax25_protocol { … };
void ax25_register_pid(struct ax25_protocol *ap);
void ax25_protocol_release(unsigned int);
struct ax25_linkfail { … };
void ax25_linkfail_register(struct ax25_linkfail *lf);
void ax25_linkfail_release(struct ax25_linkfail *lf);
int __must_check ax25_listen_register(const ax25_address *,
struct net_device *);
void ax25_listen_release(const ax25_address *, struct net_device *);
int(*ax25_protocol_function(unsigned int))(struct sk_buff *, ax25_cb *);
int ax25_listen_mine(const ax25_address *, struct net_device *);
void ax25_link_failed(ax25_cb *, int);
int ax25_protocol_is_registered(unsigned int);
int ax25_rx_iframe(ax25_cb *, struct sk_buff *);
int ax25_kiss_rcv(struct sk_buff *, struct net_device *, struct packet_type *,
struct net_device *);
netdev_tx_t ax25_ip_xmit(struct sk_buff *skb);
extern const struct header_ops ax25_header_ops;
ax25_cb *ax25_send_frame(struct sk_buff *, int, const ax25_address *,
ax25_address *, ax25_digi *, struct net_device *);
void ax25_output(ax25_cb *, int, struct sk_buff *);
void ax25_kick(ax25_cb *);
void ax25_transmit_buffer(ax25_cb *, struct sk_buff *, int);
void ax25_queue_xmit(struct sk_buff *skb, struct net_device *dev);
int ax25_check_iframes_acked(ax25_cb *, unsigned short);
void ax25_rt_device_down(struct net_device *);
int ax25_rt_ioctl(unsigned int, void __user *);
extern const struct seq_operations ax25_rt_seqops;
ax25_route *ax25_get_route(ax25_address *addr, struct net_device *dev);
int ax25_rt_autobind(ax25_cb *, ax25_address *);
struct sk_buff *ax25_rt_build_path(struct sk_buff *, ax25_address *,
ax25_address *, ax25_digi *);
void ax25_rt_free(void);
int ax25_std_frame_in(ax25_cb *, struct sk_buff *, int);
void ax25_std_nr_error_recovery(ax25_cb *);
void ax25_std_establish_data_link(ax25_cb *);
void ax25_std_transmit_enquiry(ax25_cb *);
void ax25_std_enquiry_response(ax25_cb *);
void ax25_std_timeout_response(ax25_cb *);
void ax25_std_heartbeat_expiry(ax25_cb *);
void ax25_std_t1timer_expiry(ax25_cb *);
void ax25_std_t2timer_expiry(ax25_cb *);
void ax25_std_t3timer_expiry(ax25_cb *);
void ax25_std_idletimer_expiry(ax25_cb *);
void ax25_clear_queues(ax25_cb *);
void ax25_frames_acked(ax25_cb *, unsigned short);
void ax25_requeue_frames(ax25_cb *);
int ax25_validate_nr(ax25_cb *, unsigned short);
int ax25_decode(ax25_cb *, struct sk_buff *, int *, int *, int *);
void ax25_send_control(ax25_cb *, int, int, int);
void ax25_return_dm(struct net_device *, ax25_address *, ax25_address *,
ax25_digi *);
void ax25_calculate_t1(ax25_cb *);
void ax25_calculate_rtt(ax25_cb *);
void ax25_disconnect(ax25_cb *, int);
void ax25_setup_timers(ax25_cb *);
void ax25_start_heartbeat(ax25_cb *);
void ax25_start_t1timer(ax25_cb *);
void ax25_start_t2timer(ax25_cb *);
void ax25_start_t3timer(ax25_cb *);
void ax25_start_idletimer(ax25_cb *);
void ax25_stop_heartbeat(ax25_cb *);
void ax25_stop_t1timer(ax25_cb *);
void ax25_stop_t2timer(ax25_cb *);
void ax25_stop_t3timer(ax25_cb *);
void ax25_stop_idletimer(ax25_cb *);
int ax25_t1timer_running(ax25_cb *);
unsigned long ax25_display_timer(struct timer_list *);
extern int ax25_uid_policy;
ax25_uid_assoc *ax25_findbyuid(kuid_t);
int __must_check ax25_uid_ioctl(int, struct sockaddr_ax25 *);
extern const struct seq_operations ax25_uid_seqops;
void ax25_uid_free(void);
#ifdef CONFIG_SYSCTL
int ax25_register_dev_sysctl(ax25_dev *ax25_dev);
void ax25_unregister_dev_sysctl(ax25_dev *ax25_dev);
#else
static inline int ax25_register_dev_sysctl(ax25_dev *ax25_dev) { return 0; }
static inline void ax25_unregister_dev_sysctl(ax25_dev *ax25_dev) {}
#endif
#endif