Skip to content

Baresip tries to bind to IPv6 address it shouldn't try to bind (and fails hard) #3245

@robert-scheck

Description

@robert-scheck
$ baresip -v
baresip v3.17.1 Copyright (C) 2010 - 2024 Alfred E. Heggestad et al.
Local network addresses:
 enp0s13f0u1u4u4:  172.16.51.175
     virbr2:  192.168.125.1
     virbr1:  192.168.110.1
     virbr0:  192.168.122.1
 enp0s13f0u1u4u4:  2001:db8:1:21:xxxx:xxxx:xxxx:xxxx
 enp0s13f0u1u4u4:  fe80::yyyy:yyyy:yyyy:yyyy
     virbr2:  2001:db8:ddde:ffff::1
uag: add local address 172.16.51.175
ua: adding SIP CA file: /etc/pki/tls/certs/ca-bundle.crt
ua: adding SIP CA path: 
uag: add local address 192.168.125.1
uag: add local address 192.168.110.1
uag: add local address 192.168.122.1
uag: add local address 2001:db8:1:21:xxxx:xxxx:xxxx:xxxx
uag: add local address fe80::yyyy:yyyy:yyyy:yyyy
uag: add local address 2001:db8:ddde:ffff::1
tcp: sock_bind: bind: Cannot assign requested address [99] (af=10, [2001:db8:ddde:ffff::1]:0)
ua: SIP Transport failed: Cannot assign requested address [99]
ua: init failed (Cannot assign requested address [99])
ua: stop all (forced=1)
main: unloading modules..
$ 

So, baresip tries to bind 2001:db8:ddde:ffff::1 which comes from virbr2, which is a bridging interface created by libvirt for KVM-based virtual machines on the Linux workstation, fails and exits. The exiting baresip makes it unusable, even the hard failure for a binding issue itself might be technically correct. Let's look to the IP configuration:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: enp0s13f0u1u4u4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 172.16.51.175/24 brd 172.16.51.255 scope global dynamic noprefixroute enp0s13f0u1u4u4
       valid_lft 41753sec preferred_lft 41753sec
    inet6 2001:db8:1:21:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute 
       valid_lft 86313sec preferred_lft 14313sec
    inet6 fe80::yyyy:yyyy:yyyy:yyyy/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: wlp0s20f3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff permaddr xx:xx:xx:xx:xx:xx
5: virbr2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:0a:03:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.125.1/24 brd 192.168.125.255 scope global virbr2
       valid_lft forever preferred_lft forever
    inet6 2001:db8:ddde:ffff::1/96 scope global tentative 
       valid_lft forever preferred_lft forever
6: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:10:df:cf brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.1/24 brd 192.168.110.255 scope global virbr1
       valid_lft forever preferred_lft forever
7: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:b6:09:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
$ 

Why does baresip just fail for the IPv6 address on virbr2? Is it the tentative? Why does baresip succeed for the IPv4 address on the same interface? Is it correct that baresip even tries to bind to an interface, that has no carrier (link state down)? From what I get, the code 99 comes from underlying libraries, but I didn't dig into that.

If the behaviour is correct, could we maybe add a configuration option to ignore some interfaces, e.g. virbr*?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions