/**
@file     raw_socket_manager.h
@brief    Manager for RAW and netlink sockets
@details  Copyright (c) 2025 Acronis International GmbH
@author   Denis Kopyrin (denis.kopyrin@acronis.com)
@since    $Id: $
*/

#pragma once

#include <linux/dcache.h>
#include <linux/fs.h>

#ifdef KERNEL_MOCK
#include "mock/mock_net.h"
#endif

#include <linux/net.h>
#include <linux/socket.h>

#include "task_info_map.h"

void raw_socket_manager_init(void);
void raw_socket_manager_activate(void);
void raw_socket_manager_deactivate(void);

// This hook is used to ensure that inode for sb is free'd
void raw_socket_manager_inode_free_security(const struct inode *inode);

// sockets passed here must refer to SOCK_RAW protocol (and probably be not loopback'd)
void raw_socket_manager_will_sniff_recvmsg(task_info_t* task_info, struct socket *sock);
void raw_socket_manager_recvmsg(task_info_t* task_info, struct socket *sock);
