aboutgitcodelistschat:MatrixIRC
path: root/seitan.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2023-12-21 12:06:05 +0100
committerStefano Brivio <sbrivio@redhat.com>2023-12-21 12:45:36 +0100
commitbdbec30a849807fb5e6841a38cfe0d168e5962b9 (patch)
tree210949d96b4d764235c1c5b81ad2eebb61681f95 /seitan.c
parentc72c2493de8990c3a3b4780ec1429a3c359c121e (diff)
downloadseitan-bdbec30a849807fb5e6841a38cfe0d168e5962b9.tar
seitan-bdbec30a849807fb5e6841a38cfe0d168e5962b9.tar.gz
seitan-bdbec30a849807fb5e6841a38cfe0d168e5962b9.tar.bz2
seitan-bdbec30a849807fb5e6841a38cfe0d168e5962b9.tar.lz
seitan-bdbec30a849807fb5e6841a38cfe0d168e5962b9.tar.xz
seitan-bdbec30a849807fb5e6841a38cfe0d168e5962b9.tar.zst
seitan-bdbec30a849807fb5e6841a38cfe0d168e5962b9.zip
seitan: Add netlink, sendto()/sendmsg(), iovec handling, demo with routes
A bit rough at the moment, but it does the trick. Bonus: setsockopt() (with magic values only, not used in any demo yet). Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'seitan.c')
-rw-r--r--seitan.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/seitan.c b/seitan.c
index fbfeb42..17ec63e 100644
--- a/seitan.c
+++ b/seitan.c
@@ -195,6 +195,24 @@ static int recvfd(int sockfd)
return fd;
}
+static void gluten_relocate(struct gluten *g)
+{
+ unsigned i;
+
+ for (i = 0; i < 256; i++) {
+ void **p;
+
+ switch (g->header.relocation[i].type) {
+ case OFFSET_DATA:
+ p = gluten_write_ptr(g, g->header.relocation[i]);
+ *p = (intptr_t)*p + g->data;
+ break;
+ default:
+ ;
+ }
+ }
+}
+
int main(int argc, char **argv)
{
char req_b[BUFSIZ];
@@ -212,11 +230,14 @@ int main(int argc, char **argv)
arguments.uid = getuid();
arguments.gid = getgid();
parse(argc, argv, &arguments);
+
fd = open(arguments.input_file, O_CLOEXEC | O_RDONLY);
if (read(fd, &g, sizeof(g)) != sizeof(g))
die("Failed to read gluten file");
close(fd);
+ gluten_relocate(&g);
+
if (arguments.pid > 0) {
if ((pidfd = syscall(SYS_pidfd_open, arguments.pid, 0)) < 0)
die(" pidfd_open");