Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/s2io.c
This commit is contained in:
@ -155,6 +155,9 @@ static int llc_ui_create(struct net *net, struct socket *sock, int protocol)
|
||||
struct sock *sk;
|
||||
int rc = -ESOCKTNOSUPPORT;
|
||||
|
||||
if (!capable(CAP_NET_RAW))
|
||||
return -EPERM;
|
||||
|
||||
if (net != &init_net)
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
|
@ -198,7 +198,7 @@ int llc_conn_ac_send_disc_cmd_p_set_x(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -223,7 +223,7 @@ int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -249,7 +249,7 @@ int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -282,7 +282,8 @@ int llc_conn_ac_send_frmr_rsp_f_set_x(struct sock *sk, struct sk_buff *skb)
|
||||
llc_pdu_decode_pf_bit(skb, &f_bit);
|
||||
else
|
||||
f_bit = 0;
|
||||
nskb = llc_alloc_frame(sk, llc->dev);
|
||||
nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U,
|
||||
sizeof(struct llc_frmr_info));
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
|
||||
@ -306,7 +307,8 @@ int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U,
|
||||
sizeof(struct llc_frmr_info));
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -336,7 +338,8 @@ int llc_conn_ac_resend_frmr_rsp_f_set_p(struct sock *sk, struct sk_buff *skb)
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
|
||||
llc_pdu_decode_pf_bit(skb, &f_bit);
|
||||
nskb = llc_alloc_frame(sk, llc->dev);
|
||||
nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U,
|
||||
sizeof(struct llc_frmr_info));
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);
|
||||
@ -424,7 +427,7 @@ int llc_conn_ac_resend_i_xxx_x_set_0_or_send_rr(struct sock *sk,
|
||||
struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -459,7 +462,7 @@ int llc_conn_ac_send_rej_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -483,7 +486,7 @@ int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -507,7 +510,7 @@ int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -531,7 +534,7 @@ int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -555,7 +558,7 @@ int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -579,7 +582,7 @@ int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -615,7 +618,7 @@ int llc_conn_ac_opt_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -639,7 +642,7 @@ int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -663,7 +666,7 @@ int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -688,7 +691,7 @@ int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -712,7 +715,7 @@ int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -736,7 +739,7 @@ int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -770,7 +773,7 @@ int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
@ -799,7 +802,7 @@ int llc_conn_ac_send_ua_rsp_f_set_p(struct sock *sk, struct sk_buff *skb)
|
||||
u8 f_bit;
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_U, 0);
|
||||
|
||||
llc_pdu_decode_pf_bit(skb, &f_bit);
|
||||
if (nskb) {
|
||||
@ -956,7 +959,7 @@ static int llc_conn_ac_send_rr_rsp_f_set_ackpf(struct sock *sk,
|
||||
{
|
||||
int rc = -ENOBUFS;
|
||||
struct llc_sock *llc = llc_sk(sk);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(sk, llc->dev, LLC_PDU_TYPE_S, 0);
|
||||
|
||||
if (nskb) {
|
||||
struct llc_sap *sap = llc->sap;
|
||||
|
@ -25,8 +25,6 @@
|
||||
LIST_HEAD(llc_sap_list);
|
||||
DEFINE_RWLOCK(llc_sap_list_lock);
|
||||
|
||||
unsigned char llc_station_mac_sa[ETH_ALEN];
|
||||
|
||||
/**
|
||||
* llc_sap_alloc - allocates and initializes sap.
|
||||
*
|
||||
@ -37,8 +35,8 @@ static struct llc_sap *llc_sap_alloc(void)
|
||||
struct llc_sap *sap = kzalloc(sizeof(*sap), GFP_ATOMIC);
|
||||
|
||||
if (sap) {
|
||||
/* sap->laddr.mac - leave as a null, it's filled by bind */
|
||||
sap->state = LLC_SAP_STATE_ACTIVE;
|
||||
memcpy(sap->laddr.mac, llc_station_mac_sa, ETH_ALEN);
|
||||
rwlock_init(&sap->sk_list.lock);
|
||||
atomic_set(&sap->refcnt, 1);
|
||||
}
|
||||
@ -167,10 +165,6 @@ static int __init llc_init(void)
|
||||
if (dev != NULL)
|
||||
dev = next_net_device(dev);
|
||||
|
||||
if (dev != NULL)
|
||||
memcpy(llc_station_mac_sa, dev->dev_addr, ETH_ALEN);
|
||||
else
|
||||
memset(llc_station_mac_sa, 0, ETH_ALEN);
|
||||
dev_add_pack(&llc_packet_type);
|
||||
dev_add_pack(&llc_tr_packet_type);
|
||||
return 0;
|
||||
@ -185,7 +179,6 @@ static void __exit llc_exit(void)
|
||||
module_init(llc_init);
|
||||
module_exit(llc_exit);
|
||||
|
||||
EXPORT_SYMBOL(llc_station_mac_sa);
|
||||
EXPORT_SYMBOL(llc_sap_list);
|
||||
EXPORT_SYMBOL(llc_sap_list_lock);
|
||||
EXPORT_SYMBOL(llc_sap_find);
|
||||
|
@ -117,8 +117,12 @@ static inline int llc_fixup_skb(struct sk_buff *skb)
|
||||
skb_pull(skb, llc_len);
|
||||
if (skb->protocol == htons(ETH_P_802_2)) {
|
||||
__be16 pdulen = eth_hdr(skb)->h_proto;
|
||||
u16 data_size = ntohs(pdulen) - llc_len;
|
||||
s32 data_size = ntohs(pdulen) - llc_len;
|
||||
|
||||
if (data_size < 0 ||
|
||||
((skb_tail_pointer(skb) -
|
||||
(u8 *)pdu) - llc_len) < data_size)
|
||||
return 0;
|
||||
if (unlikely(pskb_trim_rcsum(skb, data_size)))
|
||||
return 0;
|
||||
}
|
||||
|
@ -241,7 +241,7 @@ void llc_pdu_init_as_frmr_rsp(struct sk_buff *skb, struct llc_pdu_sn *prev_pdu,
|
||||
FRMR_INFO_SET_PDU_INFO_2LONG_IND(frmr_info, vzyxw);
|
||||
FRMR_INFO_SET_PDU_INVALID_Nr_IND(frmr_info, vzyxw);
|
||||
FRMR_INFO_SET_PDU_INVALID_Ns_IND(frmr_info, vzyxw);
|
||||
skb_put(skb, 5);
|
||||
skb_put(skb, sizeof(struct llc_frmr_info));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -103,7 +103,8 @@ int llc_sap_action_send_xid_r(struct llc_sap *sap, struct sk_buff *skb)
|
||||
llc_pdu_decode_sa(skb, mac_da);
|
||||
llc_pdu_decode_da(skb, mac_sa);
|
||||
llc_pdu_decode_ssap(skb, &dsap);
|
||||
nskb = llc_alloc_frame(NULL, skb->dev);
|
||||
nskb = llc_alloc_frame(NULL, skb->dev, LLC_PDU_TYPE_U,
|
||||
sizeof(struct llc_xid_info));
|
||||
if (!nskb)
|
||||
goto out;
|
||||
llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap,
|
||||
@ -144,11 +145,15 @@ int llc_sap_action_send_test_r(struct llc_sap *sap, struct sk_buff *skb)
|
||||
u8 mac_da[ETH_ALEN], mac_sa[ETH_ALEN], dsap;
|
||||
struct sk_buff *nskb;
|
||||
int rc = 1;
|
||||
u32 data_size;
|
||||
|
||||
llc_pdu_decode_sa(skb, mac_da);
|
||||
llc_pdu_decode_da(skb, mac_sa);
|
||||
llc_pdu_decode_ssap(skb, &dsap);
|
||||
nskb = llc_alloc_frame(NULL, skb->dev);
|
||||
|
||||
/* The test request command is type U (llc_len = 3) */
|
||||
data_size = ntohs(eth_hdr(skb)->h_proto) - 3;
|
||||
nskb = llc_alloc_frame(NULL, skb->dev, LLC_PDU_TYPE_U, data_size);
|
||||
if (!nskb)
|
||||
goto out;
|
||||
llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, sap->laddr.lsap, dsap,
|
||||
|
@ -24,20 +24,41 @@
|
||||
#include <net/tcp_states.h>
|
||||
#include <linux/llc.h>
|
||||
|
||||
static int llc_mac_header_len(unsigned short devtype)
|
||||
{
|
||||
switch (devtype) {
|
||||
case ARPHRD_ETHER:
|
||||
case ARPHRD_LOOPBACK:
|
||||
return sizeof(struct ethhdr);
|
||||
#ifdef CONFIG_TR
|
||||
case ARPHRD_IEEE802_TR:
|
||||
return sizeof(struct trh_hdr);
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* llc_alloc_frame - allocates sk_buff for frame
|
||||
* @dev: network device this skb will be sent over
|
||||
* @type: pdu type to allocate
|
||||
* @data_size: data size to allocate
|
||||
*
|
||||
* Allocates an sk_buff for frame and initializes sk_buff fields.
|
||||
* Returns allocated skb or %NULL when out of memory.
|
||||
*/
|
||||
struct sk_buff *llc_alloc_frame(struct sock *sk, struct net_device *dev)
|
||||
struct sk_buff *llc_alloc_frame(struct sock *sk, struct net_device *dev,
|
||||
u8 type, u32 data_size)
|
||||
{
|
||||
struct sk_buff *skb = alloc_skb(128, GFP_ATOMIC);
|
||||
int hlen = type == LLC_PDU_TYPE_U ? 3 : 4;
|
||||
struct sk_buff *skb;
|
||||
|
||||
hlen += llc_mac_header_len(dev->type);
|
||||
skb = alloc_skb(hlen + data_size, GFP_ATOMIC);
|
||||
|
||||
if (skb) {
|
||||
skb_reset_mac_header(skb);
|
||||
skb_reserve(skb, 50);
|
||||
skb_reserve(skb, hlen);
|
||||
skb_reset_network_header(skb);
|
||||
skb_reset_transport_header(skb);
|
||||
skb->protocol = htons(ETH_P_802_2);
|
||||
|
@ -253,13 +253,14 @@ static int llc_station_ac_inc_xid_r_cnt_by_1(struct sk_buff *skb)
|
||||
static int llc_station_ac_send_null_dsap_xid_c(struct sk_buff *skb)
|
||||
{
|
||||
int rc = 1;
|
||||
struct sk_buff *nskb = llc_alloc_frame(NULL, skb->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(NULL, skb->dev, LLC_PDU_TYPE_U,
|
||||
sizeof(struct llc_xid_info));
|
||||
|
||||
if (!nskb)
|
||||
goto out;
|
||||
llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, 0, LLC_PDU_CMD);
|
||||
llc_pdu_init_as_xid_cmd(nskb, LLC_XID_NULL_CLASS_2, 127);
|
||||
rc = llc_mac_hdr_init(nskb, llc_station_mac_sa, llc_station_mac_sa);
|
||||
rc = llc_mac_hdr_init(nskb, skb->dev->dev_addr, skb->dev->dev_addr);
|
||||
if (unlikely(rc))
|
||||
goto free;
|
||||
llc_station_send_pdu(nskb);
|
||||
@ -274,7 +275,8 @@ static int llc_station_ac_send_xid_r(struct sk_buff *skb)
|
||||
{
|
||||
u8 mac_da[ETH_ALEN], dsap;
|
||||
int rc = 1;
|
||||
struct sk_buff* nskb = llc_alloc_frame(NULL, skb->dev);
|
||||
struct sk_buff *nskb = llc_alloc_frame(NULL, skb->dev, LLC_PDU_TYPE_U,
|
||||
sizeof(struct llc_xid_info));
|
||||
|
||||
if (!nskb)
|
||||
goto out;
|
||||
@ -283,7 +285,7 @@ static int llc_station_ac_send_xid_r(struct sk_buff *skb)
|
||||
llc_pdu_decode_ssap(skb, &dsap);
|
||||
llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP);
|
||||
llc_pdu_init_as_xid_rsp(nskb, LLC_XID_NULL_CLASS_2, 127);
|
||||
rc = llc_mac_hdr_init(nskb, llc_station_mac_sa, mac_da);
|
||||
rc = llc_mac_hdr_init(nskb, skb->dev->dev_addr, mac_da);
|
||||
if (unlikely(rc))
|
||||
goto free;
|
||||
llc_station_send_pdu(nskb);
|
||||
@ -298,7 +300,12 @@ static int llc_station_ac_send_test_r(struct sk_buff *skb)
|
||||
{
|
||||
u8 mac_da[ETH_ALEN], dsap;
|
||||
int rc = 1;
|
||||
struct sk_buff *nskb = llc_alloc_frame(NULL, skb->dev);
|
||||
u32 data_size;
|
||||
struct sk_buff *nskb;
|
||||
|
||||
/* The test request command is type U (llc_len = 3) */
|
||||
data_size = ntohs(eth_hdr(skb)->h_proto) - 3;
|
||||
nskb = llc_alloc_frame(NULL, skb->dev, LLC_PDU_TYPE_U, data_size);
|
||||
|
||||
if (!nskb)
|
||||
goto out;
|
||||
@ -307,7 +314,7 @@ static int llc_station_ac_send_test_r(struct sk_buff *skb)
|
||||
llc_pdu_decode_ssap(skb, &dsap);
|
||||
llc_pdu_header_init(nskb, LLC_PDU_TYPE_U, 0, dsap, LLC_PDU_RSP);
|
||||
llc_pdu_init_as_test_rsp(nskb, skb);
|
||||
rc = llc_mac_hdr_init(nskb, llc_station_mac_sa, mac_da);
|
||||
rc = llc_mac_hdr_init(nskb, skb->dev->dev_addr, mac_da);
|
||||
if (unlikely(rc))
|
||||
goto free;
|
||||
llc_station_send_pdu(nskb);
|
||||
|
Reference in New Issue
Block a user