unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: Federico Beffa <beffa@ieee.org>
Cc: Guix-devel <guix-devel@gnu.org>
Subject: Re: sockets availability during build
Date: Fri, 23 Jan 2015 22:31:16 +0100	[thread overview]
Message-ID: <87d265rxp7.fsf@gnu.org> (raw)
In-Reply-To: <CAKrPhPN=85yDS8VthrUBoP=kFzvdhiXzxJtuoR0Xe0otWkUhFA@mail.gmail.com> (Federico Beffa's message of "Fri, 23 Jan 2015 18:37:04 +0100")

Federico Beffa <beffa@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’.

  reply	other threads:[~2015-01-23 21:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-22 19:54 sockets availability during build Federico Beffa
2015-01-22 20:29 ` John Darrington
2015-01-23  8:38 ` Ludovic Courtès
2015-01-23 17:37   ` Federico Beffa
2015-01-23 21:31     ` Ludovic Courtès [this message]
2015-01-24 14:05       ` Federico Beffa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87d265rxp7.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=beffa@ieee.org \
    --cc=guix-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).