Esempio n. 1
0
/**
 * recv_msg - handle incoming TIPC message from an InfiniBand interface
 *
 * Accept only packets explicitly sent to this node, or broadcast packets;
 * ignores packets sent using InfiniBand multicast, and traffic sent to other
 * nodes (which can happen if interface is running in promiscuous mode).
 */
static int recv_msg(struct sk_buff *buf, struct net_device *dev,
                    struct packet_type *pt, struct net_device *orig_dev)
{
    struct ib_bearer *ib_ptr = (struct ib_bearer *)pt->af_packet_priv;

    if (!net_eq(dev_net(dev), &init_net)) {
        kfree_skb(buf);
        return 0;
    }

    if (likely(ib_ptr->bearer)) {
        if (likely(buf->pkt_type <= PACKET_BROADCAST)) {
            buf->next = NULL;
            tipc_recv_msg(buf, ib_ptr->bearer);
            return 0;
        }
    }
    kfree_skb(buf);
    return 0;
}
Esempio n. 2
0
static int recv_msg(struct sk_buff *buf, struct net_device *dev, 
		    struct packet_type *pt, struct net_device *orig_dev)
{
	struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv;
	u32 size;

	if (likely(eb_ptr->bearer)) {
		size = msg_size((struct tipc_msg *)buf->data);
		skb_trim(buf, size);
		if (likely(buf->len == size)) {
			buf->next = NULL;
			tipc_recv_msg(buf, eb_ptr->bearer);
		} else {
			kfree_skb(buf);
		}
	} else {
		kfree_skb(buf);
	}
	return TIPC_OK;
}
Esempio n. 3
0
static int recv_msg(struct sk_buff *buf, struct net_device *dev, 
		    struct packet_type *pt, struct net_device *orig_dev)
{
	struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv;
	u32 size;

	if (likely(eb_ptr->bearer)) {
	       if (likely(!dev->promiscuity) ||
	           !memcmp(buf->mac.raw,dev->dev_addr,ETH_ALEN) ||
	           !memcmp(buf->mac.raw,dev->broadcast,ETH_ALEN)) {
		        size = msg_size((struct tipc_msg *)buf->data);
	                skb_trim(buf, size);
	        	if (likely(buf->len == size)) {
		        	buf->next = NULL;
			        tipc_recv_msg(buf, eb_ptr->bearer);
			        return TIPC_OK;
			}
		}
	}
	kfree_skb(buf);
	return TIPC_OK;
}