Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/** @file
 * @brief Packet Sockets related functions
 */

/*
 * Copyright (c) 2019 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <logging/log.h>
LOG_MODULE_REGISTER(net_sockets_raw, CONFIG_NET_SOCKETS_LOG_LEVEL);

#include <errno.h>
#include <net/net_pkt.h>
#include <net/net_context.h>
#include <net/ethernet.h>

#include "connection.h"
#include "packet_socket.h"

enum net_verdict net_packet_socket_input(struct net_pkt *pkt)
{
	/* Currently we are skipping L2 layer verification and not
	 * removing L2 header from packet.
	 * TODO :
	 * 1) Pass it through L2 layer, so that L2 will verify
	 * that packet is intended to us or not and sets src and dst lladdr.
	 * And L2 should not pull off L2 header when combination of socket
	 * like this AF_PACKET, SOCK_RAW and ETH_P_ALL proto.
	 * 2) Socket combination of AF_INET, SOCK_RAW, IPPROTO_RAW
	 * packet has to go through L2 and L2 verfies it's header and removes
	 * header. Only packet with L3 header will be given to socket.
	 * 3) If user opens raw and non raw socket together, based on raw
	 * socket combination packet has to be feed to raw socket and only
	 * data part to be feed to non raw socket.
	 */

	net_pkt_set_family(pkt, AF_PACKET);

	return net_conn_input(pkt, NULL, ETH_P_ALL, NULL);
}