fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / net / llc_pdu.h
index 644f9ed..aa33a47 100644 (file)
@@ -252,10 +252,12 @@ static inline void llc_pdu_header_init(struct sk_buff *skb, u8 type,
  */
 static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
 {
-       if (skb->protocol == ntohs(ETH_P_802_2))
-               memcpy(sa, ((struct ethhdr *)skb->mac.raw)->h_source, ETH_ALEN);
-       else if (skb->protocol == ntohs(ETH_P_TR_802_2))
-               memcpy(sa, ((struct trh_hdr *)skb->mac.raw)->saddr, ETH_ALEN);
+       if (skb->protocol == htons(ETH_P_802_2))
+               memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN);
+       else if (skb->protocol == htons(ETH_P_TR_802_2)) {
+               memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN);
+               *sa &= 0x7F;
+       }
 }
 
 /**
@@ -267,10 +269,10 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
  */
 static inline void llc_pdu_decode_da(struct sk_buff *skb, u8 *da)
 {
-       if (skb->protocol == ntohs(ETH_P_802_2))
-               memcpy(da, ((struct ethhdr *)skb->mac.raw)->h_dest, ETH_ALEN);
-       else if (skb->protocol == ntohs(ETH_P_TR_802_2))
-               memcpy(da, ((struct trh_hdr *)skb->mac.raw)->daddr, ETH_ALEN);
+       if (skb->protocol == htons(ETH_P_802_2))
+               memcpy(da, eth_hdr(skb)->h_dest, ETH_ALEN);
+       else if (skb->protocol == htons(ETH_P_TR_802_2))
+               memcpy(da, tr_hdr(skb)->daddr, ETH_ALEN);
 }
 
 /**
@@ -343,11 +345,11 @@ static inline void llc_pdu_init_as_test_rsp(struct sk_buff *skb,
        pdu->ctrl_1  = LLC_PDU_TYPE_U;
        pdu->ctrl_1 |= LLC_1_PDU_CMD_TEST;
        pdu->ctrl_1 |= LLC_U_PF_BIT_MASK;
-       if (ev_skb->protocol == ntohs(ETH_P_802_2)) {
+       if (ev_skb->protocol == htons(ETH_P_802_2)) {
                struct llc_pdu_un *ev_pdu = llc_pdu_un_hdr(ev_skb);
                int dsize;
 
-               dsize = ntohs(((struct ethhdr *)ev_skb->mac.raw)->h_proto) - 3;
+               dsize = ntohs(eth_hdr(ev_skb)->h_proto) - 3;
                memcpy(((u8 *)pdu) + 3, ((u8 *)ev_pdu) + 3, dsize);
                skb_put(skb, dsize);
        }
@@ -355,7 +357,7 @@ static inline void llc_pdu_init_as_test_rsp(struct sk_buff *skb,
 
 /* LLC Type 1 XID command/response information fields format */
 struct llc_xid_info {
-       u8 fmt_id;      /* always 0x18 for LLC */
+       u8 fmt_id;      /* always 0x81 for LLC */
        u8 type;        /* different if NULL/non-NULL LSAP */
        u8 rw;          /* sender receive window */
 };
@@ -419,7 +421,6 @@ struct llc_frmr_info {
 extern void llc_pdu_set_cmd_rsp(struct sk_buff *skb, u8 type);
 extern void llc_pdu_set_pf_bit(struct sk_buff *skb, u8 bit_value);
 extern void llc_pdu_decode_pf_bit(struct sk_buff *skb, u8 *pf_bit);
-extern void llc_pdu_decode_cr_bit(struct sk_buff *skb, u8 *cr_bit);
 extern void llc_pdu_init_as_disc_cmd(struct sk_buff *skb, u8 p_bit);
 extern void llc_pdu_init_as_i_cmd(struct sk_buff *skb, u8 p_bit, u8 ns, u8 nr);
 extern void llc_pdu_init_as_rej_cmd(struct sk_buff *skb, u8 p_bit, u8 nr);