ÿØÿà JFIF ` ` ÿþ
|
Server : Apache System : Linux cloud.heroica.com.br 4.18.0-553.36.1.el8_10.x86_64 #1 SMP Wed Jan 22 03:07:54 EST 2025 x86_64 User : farolpborg ( 1053) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /proc/self/root/usr/src/file_protector-1.1-1505/transport/ |
Upload File : |
/**
@file
@brief Message transport between kernel and userspace
@details Copyright (c) 2017 Acronis International GmbH
@author Mikhail Krivtsov (mikhail.krivtsov@acronis.com)
@since $Id: $
*/
#pragma once
#include <linux/fs.h>
#include <linux/types.h> // bool, [u]int(8|16|32|64)_t, pid_t
#include "transport_protocol.h"
// This is the header of the buffer that is 'mmap'd between kernel and user space.
// Both reader & write must use READ_ONCE/WRITE_ONCE/smp_* when accessing its contents.
typedef struct {
// 'head' and 'tail' is ring-like - reader reads from the 'head' and moves it to the 'tail'
// 'writer' moves the 'tail' as showing that more content is available.
// In our case, kernel=writer & userspace=reader
// Head is written only by userspace, it is specifying offset in 'entries' in bytes
// When head is written by userspace using 'smp_store_release', kernel must 'smp_load_acquire' it
uint32_t head ____cacheline_aligned_in_smp;
// Tail is written only by kernelspace, it is specifying offset in 'entries' in bytes
uint32_t tail ____cacheline_aligned_in_smp;
// Entries with the data, varsized struct where 'data_queue_entry_t' itself is varsized
data_queue_entry_t entries[0] ____cacheline_aligned_in_smp;
} shared_data_queue_t;
// 'module' 'init'/'down'
int transport_mod_init(void);
void transport_mod_down(void);
// 'device' 'fops'
int transport_device_open(struct inode *, struct file *);
long transport_device_ioctl(struct file *, unsigned int, unsigned long);
ssize_t transport_device_read(struct file *, char __user *, size_t, loff_t *);
ssize_t transport_device_write(struct file *, const char __user *, size_t,
loff_t *);
int transport_device_release(struct inode *, struct file *);
int transport_device_mmap(struct file *filp, struct vm_area_struct *vma);
uint64_t transport_global_get_combined_mask(void);