Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / net / ax25.h
index 9e6368a..5bd9974 100644 (file)
 
 /* AX.25 Protocol IDs */
 #define AX25_P_ROSE                    0x01
-#define AX25_P_IP                      0xCC
-#define AX25_P_ARP                     0xCD
-#define AX25_P_TEXT                    0xF0
-#define AX25_P_NETROM                  0xCF
-#define        AX25_P_SEGMENT                  0x08
+#define AX25_P_VJCOMP                  0x06    /* Compressed TCP/IP packet   */
+                                               /* Van Jacobsen (RFC 1144)    */
+#define AX25_P_VJUNCOMP                        0x07    /* Uncompressed TCP/IP packet */
+                                               /* Van Jacobsen (RFC 1144)    */
+#define        AX25_P_SEGMENT                  0x08    /* Segmentation fragment      */
+#define AX25_P_TEXNET                  0xc3    /* TEXTNET datagram protocol  */
+#define AX25_P_LQ                      0xc4    /* Link Quality Protocol      */
+#define AX25_P_ATALK                   0xca    /* Appletalk                  */
+#define AX25_P_ATALK_ARP               0xcb    /* Appletalk ARP              */
+#define AX25_P_IP                      0xcc    /* ARPA Internet Protocol     */
+#define AX25_P_ARP                     0xcd    /* ARPA Adress Resolution     */
+#define AX25_P_FLEXNET                 0xce    /* FlexNet                    */
+#define AX25_P_NETROM                  0xcf    /* NET/ROM                    */
+#define AX25_P_TEXT                    0xF0    /* No layer 3 protocol impl.  */
 
 /* AX.25 Segment control values */
 #define        AX25_SEG_REM                    0x7F
 /* Define Link State constants. */
 
 enum { 
-       AX25_STATE_0,
-       AX25_STATE_1,
-       AX25_STATE_2,
-       AX25_STATE_3,
-       AX25_STATE_4
+       AX25_STATE_0,                   /* Listening */
+       AX25_STATE_1,                   /* SABM sent */
+       AX25_STATE_2,                   /* DISC sent */
+       AX25_STATE_3,                   /* Established */
+       AX25_STATE_4                    /* Recovery */
 };
 
 #define AX25_MODULUS           8       /*  Standard AX.25 modulus */
@@ -101,8 +110,15 @@ enum {
 enum {
        AX25_PROTO_STD_SIMPLEX,
        AX25_PROTO_STD_DUPLEX,
+#ifdef CONFIG_AX25_DAMA_SLAVE
        AX25_PROTO_DAMA_SLAVE,
-       AX25_PROTO_DAMA_MASTER
+#ifdef CONFIG_AX25_DAMA_MASTER
+       AX25_PROTO_DAMA_MASTER,
+#define AX25_PROTO_MAX AX25_PROTO_DAMA_MASTER
+#endif
+#endif
+       __AX25_PROTO_MAX,
+       AX25_PROTO_MAX = __AX25_PROTO_MAX -1
 };
 
 enum {
@@ -129,26 +145,40 @@ enum {
 #define        AX25_DEF_CONMODE        2                       /* Connected mode allowed */
 #define        AX25_DEF_WINDOW         2                       /* Window=2 */
 #define        AX25_DEF_EWINDOW        32                      /* Module-128 Window=32 */
-#define        AX25_DEF_T1             (10 * HZ)               /* T1=10s */
-#define        AX25_DEF_T2             (3 * HZ)                /* T2=3s  */
-#define        AX25_DEF_T3             (300 * HZ)              /* T3=300s */
+#define        AX25_DEF_T1             10000                   /* T1=10s */
+#define        AX25_DEF_T2             3000                    /* T2=3s  */
+#define        AX25_DEF_T3             300000                  /* T3=300s */
 #define        AX25_DEF_N2             10                      /* N2=10 */
-#define AX25_DEF_IDLE          (0 * 60 * HZ)           /* Idle=None */
+#define AX25_DEF_IDLE          0                       /* Idle=None */
 #define AX25_DEF_PACLEN                256                     /* Paclen=256 */
 #define        AX25_DEF_PROTOCOL       AX25_PROTO_STD_SIMPLEX  /* Standard AX.25 */
-#define AX25_DEF_DS_TIMEOUT    (3 * 60 * HZ)           /* DAMA timeout 3 minutes */
+#define AX25_DEF_DS_TIMEOUT    180000                  /* DAMA timeout 3 minutes */
 
 typedef struct ax25_uid_assoc {
-       struct ax25_uid_assoc   *next;
+       struct hlist_node       uid_node;
+       atomic_t                refcount;
        uid_t                   uid;
        ax25_address            call;
 } ax25_uid_assoc;
 
+#define ax25_uid_for_each(__ax25, node, list) \
+       hlist_for_each_entry(__ax25, node, list, uid_node)
+
+#define ax25_uid_hold(ax25) \
+       atomic_inc(&((ax25)->refcount))
+
+static inline void ax25_uid_put(ax25_uid_assoc *assoc)
+{
+       if (atomic_dec_and_test(&assoc->refcount)) {
+               kfree(assoc);
+       }
+}
+
 typedef struct {
        ax25_address            calls[AX25_MAX_DIGIS];
        unsigned char           repeated[AX25_MAX_DIGIS];
        unsigned char           ndigi;
-       char                    lastrepeat;
+       signed char             lastrepeat;
 } ax25_digi;
 
 typedef struct ax25_route {
@@ -214,13 +244,12 @@ typedef struct ax25_cb {
 static __inline__ void ax25_cb_put(ax25_cb *ax25)
 {
        if (atomic_dec_and_test(&ax25->refcount)) {
-               if (ax25->digipeat)
-                       kfree(ax25->digipeat);
+               kfree(ax25->digipeat);
                kfree(ax25);
        }
 }
 
-static inline unsigned short ax25_type_trans(struct sk_buff *skb, struct net_device *dev)
+static inline __be16 ax25_type_trans(struct sk_buff *skb, struct net_device *dev)
 {
        skb->dev      = dev;
        skb->pkt_type = PACKET_HOST;
@@ -243,8 +272,8 @@ extern struct sock *ax25_make_new(struct sock *, struct ax25_dev *);
 
 /* ax25_addr.c */
 extern ax25_address null_ax25_address;
-extern char *ax2asc(ax25_address *);
-extern ax25_address *asc2ax(char *);
+extern char *ax2asc(char *buf, ax25_address *);
+extern void asc2ax(ax25_address *addr, char *callsign);
 extern int  ax25cmp(ax25_address *, ax25_address *);
 extern int  ax25digicmp(ax25_digi *, ax25_digi *);
 extern unsigned char *ax25_addr_parse(unsigned char *, int, ax25_address *, ax25_address *, ax25_digi *, int *, int *);
@@ -302,10 +331,10 @@ extern int  ax25_protocol_is_registered(unsigned int);
 
 /* ax25_in.c */
 extern int  ax25_rx_iframe(ax25_cb *, struct sk_buff *);
-extern int  ax25_kiss_rcv(struct sk_buff *, struct net_device *, struct packet_type *);
+extern int  ax25_kiss_rcv(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
 
 /* ax25_ip.c */
-extern int  ax25_encapsulate(struct sk_buff *, struct net_device *, unsigned short, void *, void *, unsigned int);
+extern int  ax25_hard_header(struct sk_buff *, struct net_device *, unsigned short, void *, void *, unsigned int);
 extern int  ax25_rebuild_header(struct sk_buff *);
 
 /* ax25_out.c */
@@ -376,7 +405,7 @@ extern unsigned long ax25_display_timer(struct timer_list *);
 
 /* ax25_uid.c */
 extern int  ax25_uid_policy;
-extern ax25_address *ax25_findbyuid(uid_t);
+extern ax25_uid_assoc *ax25_findbyuid(uid_t);
 extern int  ax25_uid_ioctl(int, struct sockaddr_ax25 *);
 extern struct file_operations ax25_uid_fops;
 extern void ax25_uid_free(void);