diff options
author | Damien Miller <djm@mindrot.org> | 2017-10-25 14:09:56 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2017-10-25 14:09:56 +1100 |
commit | 97c5aaf925d61641d599071abb56012cde265978 (patch) | |
tree | e5c43efef9ec7e1901f8ba7494ee5de17ed749d0 /openbsd-compat | |
parent | ce1cca39d7935dd394080ce2df62f5ce5b51f485 (diff) |
basic valid_rdomain() implementation for Linux
Diffstat (limited to 'openbsd-compat')
-rw-r--r-- | openbsd-compat/port-net.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/openbsd-compat/port-net.c b/openbsd-compat/port-net.c index f6e32ad4..efc9f46f 100644 --- a/openbsd-compat/port-net.c +++ b/openbsd-compat/port-net.c @@ -76,7 +76,22 @@ sys_set_rdomain(int fd, const char *name) int valid_rdomain(const char *name) { - return 0; + int fd; + + /* + * This is a pretty crappy way to test. It would be better to + * check whether "name" represents a VRF device, but apparently + * that requires an rtnetlink transaction. + */ + if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) + return 0; + if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, + name, strlen(name)) == -1) { + close(fd); + return 0; + } + close(fd); + return 1; } #elif defined(SYS_RDOMAIN_XXX) /* XXX examples */ |