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

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

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

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

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

enum net_verdict net_packet_socket_input(struct net_pkt *pkt, uint8_t proto)
{
	sa_family_t orig_family;
	enum net_verdict net_verdict;

#if IS_ENABLED(CONFIG_NET_DSA)
	/*
	 * For DSA the master port is not supporting raw packets. Only the
	 * lan1..3 are working with them.
	 */
	if (dsa_is_port_master(net_pkt_iface(pkt))) {
		return NET_CONTINUE;
	}
#endif
	/* 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 verifies 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.
	 */

	orig_family = net_pkt_family(pkt);

	net_pkt_set_family(pkt, AF_PACKET);

	net_verdict = net_conn_input(pkt, NULL, proto, NULL);

	net_pkt_set_family(pkt, orig_family);

	if (net_verdict != NET_DROP) {
		return net_verdict;
	} else {
		return NET_CONTINUE;
	}
}
