Federico Beffa <be...@ieee.org> skribis: > The error is produced by the system call "setsockopt". Here is the > part of the strace log showing the error:
[...] > socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 9 > setsockopt(9, SOL_IP, IP_MULTICAST_TTL, "\4", 1) = 0 > fcntl(9, F_GETFL) = 0x2 (flags O_RDWR) > fcntl(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0 > socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 10 > setsockopt(10, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 > bind(10, {sa_family=AF_INET, sin_port=htons(1900), > sin_addr=inet_addr("0.0.0.0")}, 16) = 0 > setsockopt(10, SOL_IP, IP_ADD_MEMBERSHIP, "\357\377\377\372\0\0\0\0", > 8) = -1 ENODEV (No such device) [...] > From the above I understand that libupnp embedded server wants to > setup multicast, but, as far as I know, this doesn't work with the > "lo" interface and fails. I do not see a workaround. Anyone? Yeah <https://bugzilla.redhat.com/show_bug.cgi?id=172350> suggests that ENODEV is due to the lack of a default route. Indeed, running that fails: --8<---------------cut here---------------start------------->8--- (use-modules (guix)) (define build #~(begin (define %upnp-ipv4-multicast-address (inet-pton AF_INET "239.255.255.250")) (define %upnp-multicast-port 1900) (define %upnp-ipv4-multicast-socket-address (make-socket-address AF_INET %upnp-ipv4-multicast-address %upnp-multicast-port)) (define (open-upnp-socket) (let ((s (socket PF_INET SOCK_DGRAM 0))) (setsockopt s IPPROTO_IP IP_ADD_MEMBERSHIP (cons %upnp-ipv4-multicast-address INADDR_ANY)) s)) (pk (open-upnp-socket)) (flush-all-ports) (mkdir #$output))) (with-store store (run-with-store store (mlet %store-monad ((drv (gexp->derivation "test" build))) (built-derivations (list drv))))) --8<---------------cut here---------------end--------------->8--- If we add, before the ‘open-upnp-socket’ call, this line: --8<---------------cut here---------------start------------->8--- (system* (string-append #$net-tools "/sbin/route") "add" "-net" "default") --8<---------------cut here---------------end--------------->8--- ‘route’ simply fails with: SIOCADDRT: Operation not permitted I don’t know how to work around it. You may need to disable the tests. Thanks, Ludo’.