NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
fd.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_FILESERVER_FD_H
2 #define NDNDPDK_FILESERVER_FD_H
3 
6 #include "../ndni/data.h"
7 #include "../ndni/tlv-encoder.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 
21 typedef 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;
35  uint8_t nameV[NameMaxLength];
39 static_assert(FileServerEstimatedMetadataSize <= UINT8_MAX, "");
40 
43 
44 typedef struct FileServer FileServer;
45 
52 __attribute__((nonnull)) FileServerFd*
53 FileServerFd_Open(FileServer* p, const PName* name, TscTime now);
54 
56 __attribute__((nonnull)) void
58 
60 __attribute__((nonnull)) void
62 
64 static __rte_always_inline bool
65 FileServerFd_IsFile(const FileServerFd* entry) {
66  return S_ISREG(entry->st.stx_mode);
67 }
68 
70 static __rte_always_inline bool
71 FileServerFd_IsDir(const FileServerFd* entry) {
72  return S_ISDIR(entry->st.stx_mode);
73 }
74 
75 __attribute__((nonnull)) static inline uint32_t
76 FileServerFd_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
90 FileServerFd_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
103 FileServerFd_WriteMetadata(FileServerFd* entry, struct iovec* iov, int iovcnt);
104 
111 __attribute__((nonnull)) bool
113 
114 #endif // NDNDPDK_FILESERVER_FD_H
void FileServerFd_WriteMetadata(FileServerFd *entry, struct iovec *iov, int iovcnt)
Write metadata packet.
Definition: fd.c:309
FileServerFd * FileServer_NotFound
Sentinel value to indicate file not found.
Definition: fd.c:43
FileServerFd * FileServerFd_Open(FileServer *p, const PName *name, TscTime now)
Open file descriptor or increment reference count.
Definition: fd.c:203
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
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
struct FileServerFd FileServerFd
File descriptor related information in the file server.
@ 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
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