NDN-DPDK
High-Speed Named Data Networking Forwarder
Loading...
Searching...
No Matches
fd.h
Go to the documentation of this file.
1#ifndef NDNDPDK_FILESERVER_FD_H
2#define NDNDPDK_FILESERVER_FD_H
3
5
6#include "../ndni/data.h"
8#include "../vendor/uthash-handle.h"
9#include "enum.h"
10#include <fcntl.h>
11#include <linux/stat.h>
12#include <sys/stat.h>
13
18#define FileServerFd_StatTime(t) ((uint64_t)(t).tv_sec * SPDK_SEC_TO_NSEC + (uint64_t)(t).tv_nsec)
19
21typedef struct FileServerFd {
22 RTE_MARKER self;
23 struct statx st;
24 UT_hash_handle hh;
25 struct cds_list_head queueNode;
26 uint8_t meta[16];
27 uint64_t version;
28 uint64_t lastSeg;
29 int fd;
30 uint32_t lsL;
31 uint16_t refcnt;
32 uint16_t prefixL;
33 uint16_t versionedL;
34 uint8_t metadataL;
39static_assert(FileServerEstimatedMetadataSize <= UINT8_MAX, "");
40
43
44typedef struct FileServer FileServer;
45
52__attribute__((nonnull)) FileServerFd*
53FileServerFd_Open(FileServer* p, const PName* name, TscTime now);
54
56__attribute__((nonnull)) void
58
60__attribute__((nonnull)) void
62
64static __rte_always_inline bool
65FileServerFd_IsFile(const FileServerFd* entry) {
66 return S_ISREG(entry->st.stx_mode);
67}
68
70static __rte_always_inline bool
71FileServerFd_IsDir(const FileServerFd* entry) {
72 return S_ISDIR(entry->st.stx_mode);
73}
74
75__attribute__((nonnull)) static inline uint32_t
76FileServerFd_SizeofMetadata_(FileServerFd* entry) {
77 return TlvEncoder_SizeofVarNum(TtName) + TlvEncoder_SizeofVarNum(entry->versionedL) +
78 entry->versionedL + entry->metadataL;
79}
80
81__attribute__((nonnull)) uint32_t
83
89__attribute__((nonnull)) static inline uint32_t
90FileServerFd_PrepareMetadata(FileServer* p, FileServerFd* entry) {
91 if (entry->metadataL != 0) {
92 return FileServerFd_SizeofMetadata_(entry);
93 }
94 return FileServerFd_PrepareMetadata_(p, entry);
95}
96
102__attribute__((nonnull)) void
103FileServerFd_WriteMetadata(FileServerFd* entry, struct iovec* iov, int iovcnt);
104
111__attribute__((nonnull)) bool
113
114#endif // NDNDPDK_FILESERVER_FD_H
FileServerFd * FileServer_NotFound
Sentinel value to indicate file not found.
Definition fd.c:43
void FileServerFd_WriteMetadata(FileServerFd *entry, struct iovec *iov, int iovcnt)
Write metadata packet.
Definition fd.c:309
void FileServerFd_Clear(FileServer *p)
Close all file descriptors.
Definition fd.c:245
uint32_t FileServerFd_PrepareMetadata_(FileServer *p, FileServerFd *entry)
Definition fd.c:259
FileServerFd * FileServerFd_Open(FileServer *p, const PName *name, TscTime now)
Open file descriptor or increment reference count.
Definition fd.c:203
void FileServerFd_Unref(FileServer *p, FileServerFd *entry)
Decrement file descriptor reference count.
Definition fd.c:219
bool FileServerFd_GenerateLs(FileServer *p, FileServerFd *entry)
Populate directory listing.
Definition fd.c:354
@ FileServerEstimatedMetadataSize
Definition enum.h:22
@ FileServerMaxLsResult
Definition enum.h:8
@ TtName
Definition an.h:20
@ NameMaxLength
Definition enum.h:10
File descriptor related information in the file server.
Definition fd.h:21
char lsV[FileServerMaxLsResult]
directory listing value
Definition fd.h:36
uint8_t metadataV[FileServerEstimatedMetadataSize]
metadata value excluding Name
Definition fd.h:37
int fd
file descriptor
Definition fd.h:29
UT_hash_handle hh
fdHt hashtable handle
Definition fd.h:24
uint16_t prefixL
mount+path TLV-LENGTH
Definition fd.h:32
struct statx st
statx result
Definition fd.h:23
uint8_t nameV[NameMaxLength]
mount+path+[32=ls]+version TLV-VALUE
Definition fd.h:35
uint32_t lsL
directory listing length (UINT32_MAX means invalid)
Definition fd.h:30
uint64_t version
version number
Definition fd.h:27
struct cds_list_head queueNode
fdQ node
Definition fd.h:25
uint64_t lastSeg
last segment number
Definition fd.h:28
uint8_t meta[16]
MetaInfo (FinalBlockId only).
Definition fd.h:26
RTE_MARKER self
self reference used in HASH_ADD_BYHASHVALUE
Definition fd.h:22
uint16_t refcnt
number of inflight SQEs referencing this entry
Definition fd.h:31
uint16_t versionedL
mount+path+[32=ls]+version TLV-LENGTH
Definition fd.h:33
uint8_t metadataL
metadata length excluding Name (0 means invalid)
Definition fd.h:34
File server.
Definition server.h:27
Parsed name.
Definition name.h:139
uint64_t TscTime
TSC clock time point.
Definition tsc.h:9