Annotation of Gnu-Mach/linux/src/include/net/ax25.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     Declarations of AX.25 type objects.
                      3:  *
                      4:  *     Alan Cox (GW4PTS)       10/11/93
                      5:  */
                      6:  
                      7: #ifndef _AX25_H
                      8: #define _AX25_H 
                      9: #include <linux/ax25.h>
                     10: 
                     11: #define AX25_SLOWHZ                    10      /* Run timing at 1/10 second - gives us better resolution for 56kbit links */
                     12: 
                     13: #define        AX25_T1CLAMPLO                  (1 * AX25_SLOWHZ)       /* If defined, clamp at 1 second **/
                     14: #define        AX25_T1CLAMPHI                  (30 * AX25_SLOWHZ)      /* If defined, clamp at 30 seconds **/
                     15: 
                     16: #define        AX25_BPQ_HEADER_LEN             16
                     17: #define        AX25_KISS_HEADER_LEN            1
                     18: 
                     19: #define        AX25_HEADER_LEN                 17
                     20: #define        AX25_ADDR_LEN                   7
                     21: #define        AX25_DIGI_HEADER_LEN            (AX25_MAX_DIGIS * AX25_ADDR_LEN)
                     22: #define        AX25_MAX_HEADER_LEN             (AX25_HEADER_LEN + AX25_DIGI_HEADER_LEN)
                     23: 
                     24: /* AX.25 Protocol IDs */
                     25: #define AX25_P_ROSE                    0x01
                     26: #define AX25_P_IP                      0xCC
                     27: #define AX25_P_ARP                     0xCD
                     28: #define AX25_P_TEXT                    0xF0
                     29: #define AX25_P_NETROM                  0xCF
                     30: #define        AX25_P_SEGMENT                  0x08
                     31: 
                     32: /* AX.25 Segment control values */
                     33: #define        AX25_SEG_REM                    0x7F
                     34: #define        AX25_SEG_FIRST                  0x80
                     35: 
                     36: #define AX25_CBIT                      0x80    /* Command/Response bit */
                     37: #define AX25_EBIT                      0x01    /* HDLC Address Extension bit */
                     38: #define AX25_HBIT                      0x80    /* Has been repeated bit */
                     39: 
                     40: #define AX25_SSSID_SPARE               0x60    /* Unused bits in SSID for standard AX.25 */
                     41: #define AX25_ESSID_SPARE               0x20    /* Unused bits in SSID for extended AX.25 */
                     42: #define AX25_DAMA_FLAG                 0x20    /* Well, it is *NOT* unused! (dl1bke 951121 */
                     43: 
                     44: #define        AX25_COND_ACK_PENDING           0x01
                     45: #define        AX25_COND_REJECT                0x02
                     46: #define        AX25_COND_PEER_RX_BUSY          0x04
                     47: #define        AX25_COND_OWN_RX_BUSY           0x08
                     48: 
                     49: #ifndef _LINUX_NETDEVICE_H
                     50: #include <linux/netdevice.h>
                     51: #endif
                     52: 
                     53: /*
                     54:  * These headers are taken from the KA9Q package by Phil Karn. These specific
                     55:  * files have been placed under the GPL (not the whole package) by Phil.
                     56:  *
                     57:  *
                     58:  * Copyright 1991 Phil Karn, KA9Q
                     59:  *
                     60:  * This program is free software; you can redistribute it and/or modify
                     61:  * it under the terms of the GNU General Public License as published by
                     62:  * the Free Software Foundation; version 2 dated June, 1991.
                     63:  * 
                     64:  * This program is distributed in the hope that it will be useful,
                     65:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     66:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     67:  * GNU General Public License for more details.
                     68:  * 
                     69:  * You should have received a copy of the GNU General Public License
                     70:  * along with this program;  if not, write to the Free Software
                     71:  * Foundation, Inc., 675 Mass Ave., Cambridge, MA 02139, USA.
                     72:  */
                     73: 
                     74: /* Upper sub-layer (LAPB) definitions */
                     75: 
                     76: /* Control field templates */
                     77: #define        AX25_I                  0x00    /* Information frames */
                     78: #define        AX25_S                  0x01    /* Supervisory frames */
                     79: #define        AX25_RR                 0x01    /* Receiver ready */
                     80: #define        AX25_RNR                0x05    /* Receiver not ready */
                     81: #define        AX25_REJ                0x09    /* Reject */
                     82: #define        AX25_U                  0x03    /* Unnumbered frames */
                     83: #define        AX25_SABM               0x2f    /* Set Asynchronous Balanced Mode */
                     84: #define        AX25_SABME              0x6f    /* Set Asynchronous Balanced Mode Extended */
                     85: #define        AX25_DISC               0x43    /* Disconnect */
                     86: #define        AX25_DM                 0x0f    /* Disconnected mode */
                     87: #define        AX25_UA                 0x63    /* Unnumbered acknowledge */
                     88: #define        AX25_FRMR               0x87    /* Frame reject */
                     89: #define        AX25_UI                 0x03    /* Unnumbered information */
                     90: 
                     91: #define        AX25_PF                 0x10    /* Poll/final bit for standard AX.25 */
                     92: #define        AX25_EPF                0x01    /* Poll/final bit for extended AX.25 */
                     93: 
                     94: #define AX25_ILLEGAL           0x100   /* Impossible to be a real frame type */
                     95: 
                     96: #define        AX25_POLLOFF            0
                     97: #define        AX25_POLLON             1
                     98: 
                     99: /* AX25 L2 C-bit */
                    100: #define AX25_COMMAND           1
                    101: #define AX25_RESPONSE          2
                    102: 
                    103: /* Define Link State constants. */
                    104: 
                    105: enum { 
                    106:        AX25_STATE_0,
                    107:        AX25_STATE_1,
                    108:        AX25_STATE_2,
                    109:        AX25_STATE_3,
                    110:        AX25_STATE_4
                    111: };
                    112: 
                    113: #define        AX25_MAX_DEVICES        20      /* Max No of AX.25 devices */
                    114: 
                    115: #define AX25_MODULUS           8       /*  Standard AX.25 modulus */
                    116: #define        AX25_EMODULUS           128     /*  Extended AX.25 modulus */
                    117: 
                    118: enum {
                    119:        AX25_VALUES_IPDEFMODE,  /* 0=DG 1=VC */
                    120:        AX25_VALUES_AXDEFMODE,  /* 0=Normal 1=Extended Seq Nos */
                    121:        AX25_VALUES_BACKOFF,    /* 0=None 1=Linear 2=Exponential */
                    122:        AX25_VALUES_CONMODE,    /* Allow connected modes - 0=No 1=no "PID text" 2=all PIDs */
                    123:        AX25_VALUES_WINDOW,     /* Default window size for standard AX.25 */
                    124:        AX25_VALUES_EWINDOW,    /* Default window size for extended AX.25 */
                    125:        AX25_VALUES_T1,         /* Default T1 timeout value */
                    126:        AX25_VALUES_T2,         /* Default T2 timeout value */
                    127:        AX25_VALUES_T3,         /* Default T3 timeout value */
                    128:        AX25_VALUES_IDLE,       /* Connected mode idle timer */
                    129:        AX25_VALUES_N2,         /* Default N2 value */
                    130:        AX25_VALUES_PACLEN,     /* AX.25 MTU */
                    131:        AX25_MAX_VALUES         /* THIS MUST REMAIN THE LAST ENTRY OF THIS LIST */
                    132: };
                    133: 
                    134: #define        AX25_DEF_IPDEFMODE      0                       /* Datagram */
                    135: #define        AX25_DEF_AXDEFMODE      0                       /* Normal */
                    136: #define        AX25_DEF_BACKOFF        1                       /* Linear backoff */
                    137: #define        AX25_DEF_CONMODE        2                       /* Connected mode allowed */
                    138: #define        AX25_DEF_WINDOW         2                       /* Window=2 */
                    139: #define        AX25_DEF_EWINDOW        32                      /* Module-128 Window=32 */
                    140: #define        AX25_DEF_T1             (10 * AX25_SLOWHZ)      /* T1=10s */
                    141: #define        AX25_DEF_T2             (3 * AX25_SLOWHZ)       /* T2=3s  */
                    142: #define        AX25_DEF_T3             (300 * AX25_SLOWHZ)     /* T3=300s */
                    143: #define        AX25_DEF_N2             10                      /* N2=10 */
                    144: #define AX25_DEF_IDLE          (0 * 60 * AX25_SLOWHZ)  /* Idle=None */
                    145: #define AX25_DEF_PACLEN                256                     /* Paclen=256 */
                    146: 
                    147: typedef struct ax25_uid_assoc {
                    148:        struct ax25_uid_assoc   *next;
                    149:        uid_t                   uid;
                    150:        ax25_address            call;
                    151: } ax25_uid_assoc;
                    152: 
                    153: typedef struct {
                    154:        ax25_address            calls[AX25_MAX_DIGIS];
                    155:        unsigned char           repeated[AX25_MAX_DIGIS];
                    156:        unsigned char           ndigi;
                    157:        char                    lastrepeat;
                    158: } ax25_digi;
                    159: 
                    160: typedef struct ax25_cb {
                    161:        struct ax25_cb          *next;
                    162:        ax25_address            source_addr, dest_addr;
                    163:        struct device           *device;
                    164:        unsigned char           dama_slave, iamdigi;
                    165:        unsigned char           state, modulus, pidincl;
                    166:        unsigned short          vs, vr, va;
                    167:        unsigned char           condition, backoff;
                    168:        unsigned char           n2, n2count;
                    169:        unsigned short          t1, t2, t3, idle, rtt;
                    170:        unsigned short          t1timer, t2timer, t3timer, idletimer;
                    171:        unsigned short          paclen;
                    172:        unsigned short          fragno, fraglen;
                    173:        ax25_digi               *digipeat;
                    174:        struct sk_buff_head     write_queue;
                    175:        struct sk_buff_head     reseq_queue;
                    176:        struct sk_buff_head     ack_queue;
                    177:        struct sk_buff_head     frag_queue;
                    178:        unsigned char           window;
                    179:        struct timer_list       timer;
                    180:        struct sock             *sk;            /* Backlink to socket */
                    181: } ax25_cb;
                    182: 
                    183: #ifndef _LINUX_SYSCTL_H
                    184: #include <linux/sysctl.h>
                    185: #endif
                    186: 
                    187: struct ax25_dev {
                    188:        char                    name[20];
                    189:        struct device           *dev;
                    190:        struct device           *forward;
                    191:        struct ctl_table        systable[AX25_MAX_VALUES+1];
                    192:        int                     values[AX25_MAX_VALUES];
                    193: };
                    194: 
                    195: /* af_ax25.c */
                    196: extern ax25_address null_ax25_address;
                    197: extern char *ax2asc(ax25_address *);
                    198: extern ax25_address *asc2ax(char *);
                    199: extern int  ax25cmp(ax25_address *, ax25_address *);
                    200: extern ax25_cb *ax25_send_frame(struct sk_buff *, int, ax25_address *, ax25_address *, ax25_digi *, struct device *);
                    201: extern ax25_cb *ax25_find_cb(ax25_address *, ax25_address *, ax25_digi *, struct device *);
                    202: extern void ax25_destroy_socket(ax25_cb *);
                    203: extern struct device *ax25rtr_get_dev(ax25_address *);
                    204: extern int  ax25_encapsulate(struct sk_buff *, struct device *, unsigned short,
                    205:        void *, void *, unsigned int);
                    206: extern int  ax25_rebuild_header(void *, struct device *, unsigned long, struct sk_buff *);
                    207: extern ax25_uid_assoc *ax25_uid_list;
                    208: extern int  ax25_uid_policy;
                    209: extern ax25_address *ax25_findbyuid(uid_t);
                    210: extern void ax25_queue_xmit(struct sk_buff *, struct device *, int);
                    211: extern int  ax25_dev_is_dama_slave(struct device *);   /* dl1bke 951121 */
                    212: 
                    213: #include <net/ax25call.h>
                    214: 
                    215: /* ax25_in.c */
                    216: extern int  ax25_process_rx_frame(ax25_cb *, struct sk_buff *, int, int);
                    217: 
                    218: /* ax25_out.c */
                    219: extern void ax25_output(ax25_cb *, int, struct sk_buff *);
                    220: extern void ax25_kick(ax25_cb *);
                    221: extern void ax25_transmit_buffer(ax25_cb *, struct sk_buff *, int);
                    222: extern void ax25_nr_error_recovery(ax25_cb *);
                    223: extern void ax25_establish_data_link(ax25_cb *);
                    224: extern void ax25_transmit_enquiry(ax25_cb *);
                    225: extern void ax25_enquiry_response(ax25_cb *);
                    226: extern void ax25_timeout_response(ax25_cb *);
                    227: extern void ax25_check_iframes_acked(ax25_cb *, unsigned short);
                    228: extern void dama_enquiry_response(ax25_cb *);                  /* dl1bke 960114 */
                    229: extern void dama_establish_data_link(ax25_cb *);
                    230: 
                    231: /* ax25_route.c */
                    232: extern struct ax25_dev ax25_device[];
                    233: extern int  ax25_rt_get_info(char *, char **, off_t, int, int);
                    234: extern int  ax25_cs_get_info(char *, char **, off_t, int, int);
                    235: extern int  ax25_rt_autobind(ax25_cb *, ax25_address *);
                    236: extern ax25_digi *ax25_rt_find_path(ax25_address *, struct device *);
                    237: extern void ax25_rt_build_path(struct sk_buff *, ax25_address *, ax25_address *, ax25_digi *);
                    238: extern void ax25_rt_device_down(struct device *);
                    239: extern int  ax25_rt_ioctl(unsigned int, void *);
                    240: extern char ax25_rt_mode_get(ax25_address *, struct device *);
                    241: extern int  ax25_dev_get_value(struct device *, int);
                    242: extern void ax25_dev_device_up(struct device *);
                    243: extern void ax25_dev_device_down(struct device *);
                    244: extern int  ax25_fwd_ioctl(unsigned int, struct ax25_fwd_struct *);
                    245: extern struct device *ax25_fwd_dev(struct device *);
                    246: extern void ax25_rt_free(void);
                    247: 
                    248: /* ax25_subr.c */
                    249: extern void ax25_clear_queues(ax25_cb *);
                    250: extern void ax25_frames_acked(ax25_cb *, unsigned short);
                    251: extern void ax25_requeue_frames(ax25_cb *);
                    252: extern int  ax25_validate_nr(ax25_cb *, unsigned short);
                    253: extern int  ax25_decode(ax25_cb *, struct sk_buff *, int *, int *, int *);
                    254: extern void ax25_send_control(ax25_cb *, int, int, int);
                    255: extern unsigned short ax25_calculate_t1(ax25_cb *);
                    256: extern void ax25_calculate_rtt(ax25_cb *);
                    257: extern unsigned char *ax25_parse_addr(unsigned char *, int, ax25_address *,
                    258:        ax25_address *, ax25_digi *, int *, int *);     /* dl1bke 951121 */
                    259: extern int  build_ax25_addr(unsigned char *, ax25_address *, ax25_address *,
                    260:        ax25_digi *, int, int);
                    261: extern int  size_ax25_addr(ax25_digi *);
                    262: extern void ax25_digi_invert(ax25_digi *, ax25_digi *);
                    263: extern void ax25_return_dm(struct device *, ax25_address *, ax25_address *, ax25_digi *);
                    264: extern void ax25_dama_on(ax25_cb *);   /* dl1bke 951121 */
                    265: extern void ax25_dama_off(ax25_cb *);  /* dl1bke 951121 */
                    266: extern void ax25_disconnect(ax25_cb *, int);
                    267: 
                    268: /* ax25_timer.c */
                    269: extern void ax25_set_timer(ax25_cb *);
                    270: extern void ax25_t1_timeout(ax25_cb *);
                    271: extern void ax25_link_failed(ax25_cb *, int);
                    272: extern int  (*ax25_protocol_function(unsigned int))(struct sk_buff *, ax25_cb *);
                    273: extern int  ax25_listen_mine(ax25_address *, struct device *);
                    274: 
                    275: /* sysctl_net_ax25.c */
                    276: extern void ax25_register_sysctl(void);
                    277: extern void ax25_unregister_sysctl(void);
                    278: 
                    279: /* ... */
                    280: 
                    281: extern ax25_cb *volatile ax25_list;
                    282: 
                    283: /* support routines for modules that use AX.25, in ax25_timer.c */
                    284: extern int  ax25_protocol_register(unsigned int, int (*)(struct sk_buff *, ax25_cb *));
                    285: extern void ax25_protocol_release(unsigned int);
                    286: extern int  ax25_linkfail_register(void (*)(ax25_cb *, int));
                    287: extern void ax25_linkfail_release(void (*)(ax25_cb *, int));
                    288: extern int  ax25_listen_register(ax25_address *, struct device *);
                    289: extern void ax25_listen_release(ax25_address *, struct device *);
                    290: extern int  ax25_protocol_is_registered(unsigned int);
                    291: 
                    292: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.