Exemple #1
0
static void mpls_header_init(struct proto_hdr *hdr)
{
	proto_lower_default_add(hdr, PROTO_ETH);

	proto_header_fields_add(hdr, mpls_fields, array_size(mpls_fields));

	proto_hdr_field_set_default_be32(hdr, MPLS_LAST, 1);
}
Exemple #2
0
static void tcp_header_init(struct proto_hdr *hdr)
{
	proto_lower_default_add(hdr, PROTO_IP4);

	proto_header_fields_add(hdr, tcp_fields, array_size(tcp_fields));

	proto_hdr_field_set_default_be16(hdr, TCP_DOFF, 5);
}
Exemple #3
0
static void pause_header_init(struct proto_hdr *hdr)
{
	uint8_t eth_dst[6] = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x01 };

	struct proto_hdr *lower;

	lower = proto_lower_default_add(hdr, PROTO_ETH);
	proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, eth_dst);

	proto_header_fields_add(hdr, pause_fields, array_size(pause_fields));
	proto_hdr_field_set_default_be16(hdr, PAUSE_OPCODE, 0x1);
}
Exemple #4
0
static void ipv6_header_init(struct proto_hdr *hdr)
{
	struct dev_io *dev = proto_dev_get();

	/* In case of tun interface we do not need to create Ethernet header */
	if (dev_io_is_netdev(dev) && device_type(dev_io_name_get(dev)) != ARPHRD_NONE)
		proto_lower_default_add(hdr, PROTO_ETH);

	proto_header_fields_add(hdr, ipv6_fields, array_size(ipv6_fields));

	proto_hdr_field_set_default_be32(hdr, IP6_VER, 6);
	proto_hdr_field_set_default_dev_ipv6(hdr, IP6_SADDR);
}
Exemple #5
0
static void vlan_header_init(struct proto_hdr *hdr)
{
	struct proto_hdr *lower = proto_lower_default_add(hdr, PROTO_ETH);
	uint16_t lower_etype = 0;

	proto_header_fields_add(hdr, vlan_fields, array_size(vlan_fields));

	if (lower->ops->id == PROTO_ETH)
		lower_etype = proto_hdr_field_get_u16(lower, ETH_TYPE);
	else if (lower->ops->id == PROTO_VLAN)
		lower_etype = proto_hdr_field_get_u16(lower, VLAN_ETYPE);

	proto_hdr_field_set_be16(hdr, VLAN_ETYPE, lower_etype);
	proto_hdr_field_set_default_be16(hdr, VLAN_TPID, pid_to_eth(hdr->ops->id));
}
Exemple #6
0
static void arp_header_init(struct proto_hdr *hdr)
{
	struct proto_hdr *lower = proto_lower_default_add(hdr, PROTO_ETH);

	if (lower->ops->id == PROTO_ETH) {
		const uint8_t bcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };

		proto_hdr_field_set_default_bytes(lower, ETH_DST_ADDR, bcast);
	}

	proto_header_fields_add(hdr, arp_fields, array_size(arp_fields));

	/* Generate Announce request by default */
	proto_hdr_field_set_default_be16(hdr, ARP_HTYPE, ARPHRD_ETHER);
	proto_hdr_field_set_default_be16(hdr, ARP_PTYPE, ETH_P_IP);
	proto_hdr_field_set_default_u8(hdr, ARP_HLEN, 6);
	proto_hdr_field_set_default_u8(hdr, ARP_PLEN, 4);
	proto_hdr_field_set_default_be16(hdr, ARP_OPER, ARPOP_REQUEST);
	proto_hdr_field_set_default_dev_mac(hdr, ARP_SHA);
	proto_hdr_field_set_default_dev_ipv4(hdr, ARP_SPA);
	proto_hdr_field_set_default_dev_ipv4(hdr, ARP_TPA);
}
Exemple #7
0
static void eth_header_init(struct proto_hdr *hdr)
{
	proto_header_fields_add(hdr, eth_fields, array_size(eth_fields));

	proto_hdr_field_set_default_dev_mac(hdr, ETH_SRC_ADDR);
}
Exemple #8
0
static void icmpv6_header_init(struct proto_hdr *hdr)
{
	proto_lower_default_add(hdr, PROTO_IP6);

	proto_header_fields_add(hdr, icmpv6_fields, array_size(icmpv6_fields));
}
Exemple #9
0
static void udp_header_init(struct proto_hdr *hdr)
{
	proto_lower_default_add(hdr, PROTO_IP4);

	proto_header_fields_add(hdr, udp_fields, array_size(udp_fields));
}