diff options
author | Damien Miller <djm@mindrot.org> | 2017-10-25 05:09:56 +0200 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2017-10-25 05:09:56 +0200 |
commit | 97c5aaf925d61641d599071abb56012cde265978 (patch) | |
tree | e5c43efef9ec7e1901f8ba7494ee5de17ed749d0 /openbsd-compat/port-net.c | |
parent | implement get/set_rdomain() for Linux (diff) | |
download | openssh-97c5aaf925d61641d599071abb56012cde265978.tar.xz openssh-97c5aaf925d61641d599071abb56012cde265978.zip |
basic valid_rdomain() implementation for Linux
Diffstat (limited to 'openbsd-compat/port-net.c')
-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 f6e32ad49..efc9f46fb 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 */ |