<netinet/in.h> setsourcefilter/getsourcefilter missing const qualifier?

Victor Toni victor.toni at gmail.com
Tue May 3 20:50:38 UTC 2016


When trying to compile some linux-originated code on FreeBSD I get the
following errors:

/usr/include/netinet/in.h:585:5: note: candidate function not viable: 3rd
argument ('const sockaddr *') would lose const qualifier
int     setsourcefilter(int, uint32_t, struct sockaddr *, socklen_t,
        ^
/usr/include/netinet/in.h:587:5: note: candidate function not viable: 3rd
argument ('const sockaddr *') would lose const qualifier
int     getsourcefilter(int, uint32_t, struct sockaddr *, socklen_t,
        ^

Looking at the linux version of these funtions:

http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#616

616 <http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#616>/*
Get source filter.  */617
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#617>*extern*
*int* getsourcefilter
<http://code.metager.de/source/s?defs=getsourcefilter&project=gnu>
(*int* __s <http://code.metager.de/source/s?defs=__s&project=gnu>,
uint32_t <http://code.metager.de/source/s?defs=uint32_t&project=gnu>
__interface_addr
<http://code.metager.de/source/s?defs=__interface_addr&project=gnu>,618
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#618>			
   *const* *struct* sockaddr
<http://code.metager.de/source/s?defs=sockaddr&project=gnu> *__group
<http://code.metager.de/source/s?defs=__group&project=gnu>,619
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#619>			
   socklen_t <http://code.metager.de/source/s?defs=socklen_t&project=gnu>
__grouplen <http://code.metager.de/source/s?defs=__grouplen&project=gnu>,
uint32_t <http://code.metager.de/source/s?defs=uint32_t&project=gnu>
*__fmode <http://code.metager.de/source/s?defs=__fmode&project=gnu>,620
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#620>			
   uint32_t <http://code.metager.de/source/s?defs=uint32_t&project=gnu>
*__numsrc <http://code.metager.de/source/s?defs=__numsrc&project=gnu>,621
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#621>			
   *struct* sockaddr_storage
<http://code.metager.de/source/s?defs=sockaddr_storage&project=gnu>
*__slist <http://code.metager.de/source/s?defs=__slist&project=gnu>)
__THROW <http://code.metager.de/source/s?defs=__THROW&project=gnu>;622
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#622>623
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#623>/*
Set source filter.  */624
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#624>*extern*
*int* setsourcefilter
<http://code.metager.de/source/s?defs=setsourcefilter&project=gnu>
(*int* __s <http://code.metager.de/source/s?defs=__s&project=gnu>,
uint32_t <http://code.metager.de/source/s?defs=uint32_t&project=gnu>
__interface_addr
<http://code.metager.de/source/s?defs=__interface_addr&project=gnu>,625
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#625>			
   *const* *struct* sockaddr
<http://code.metager.de/source/s?defs=sockaddr&project=gnu> *__group
<http://code.metager.de/source/s?defs=__group&project=gnu>,626
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#626>			
   socklen_t <http://code.metager.de/source/s?defs=socklen_t&project=gnu>
__grouplen <http://code.metager.de/source/s?defs=__grouplen&project=gnu>,
uint32_t <http://code.metager.de/source/s?defs=uint32_t&project=gnu>
__fmode <http://code.metager.de/source/s?defs=__fmode&project=gnu>,627
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#627>			
   uint32_t <http://code.metager.de/source/s?defs=uint32_t&project=gnu>
__numsrc <http://code.metager.de/source/s?defs=__numsrc&project=gnu>,628
<http://code.metager.de/source/xref/gnu/glibc/inet/netinet/in.h#628>			
   *const* *struct* sockaddr_storage
<http://code.metager.de/source/s?defs=sockaddr_storage&project=gnu>
*__slist <http://code.metager.de/source/s?defs=__slist&project=gnu>)
__THROW <http://code.metager.de/source/s?defs=__THROW&project=gnu>;


and the FreeBSD version


http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#593

593 <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#593>*int*	setsourcefilter
<http://code.metager.de/source/s?defs=setsourcefilter&project=freebsd>(*int*,
uint32_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#uint32_t>,
*struct* sockaddr
<http://code.metager.de/source/s?defs=sockaddr&project=freebsd> *,
socklen_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#socklen_t>,594
<http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#594>	
uint32_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#uint32_t>,
uint32_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#uint32_t>,
*struct* sockaddr_storage
<http://code.metager.de/source/s?defs=sockaddr_storage&project=freebsd>
*);595 <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#595>*int*	getsourcefilter
<http://code.metager.de/source/s?defs=getsourcefilter&project=freebsd>(*int*,
uint32_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#uint32_t>,
*struct* sockaddr
<http://code.metager.de/source/s?defs=sockaddr&project=freebsd> *,
socklen_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#socklen_t>,596
<http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#596>	
uint32_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#uint32_t>
*, uint32_t <http://code.metager.de/source/xref/freebsd/sys/netinet/in.h#uint32_t>
*, *struct* sockaddr_storage
<http://code.metager.de/source/s?defs=sockaddr_storage&project=freebsd>
*);


the main difference is that the linux version makes guarantees about
the parameters.

(I know that the line numbers for don't match for the error given,
it's for example only)


Wouldn't it be safe for the FreeBSD version to make the same assumption?



Best regards,

Victor


More information about the freebsd-net mailing list