libsocket icon indicating copy to clipboard operation
libsocket copied to clipboard

FreeBSD compilation fail

Open ghost opened this issue 8 years ago • 2 comments

Hi, uname -a FreeBSD freebsd1 10.2-RELEASE-p9 FreeBSD 10.2-RELEASE-p9 #0: Thu Jan 14 01:32:46 UTC 2016 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64 compiler clang 3.4.1

The problem while compiling:

/home/alex/Downloads/libsocket-master/C/inet/libinetsocket.c:957:43: error: no member named 'ifr_ifindex' in 'struct ifreq' mreq4.imr_ifindex = interface.ifr_ifindex; ~~~~~~~~~ ^ /home/alex/Downloads/libsocket-master/C/inet/libinetsocket.c:997:48: error: no member named 'ifr_ifindex' in 'struct ifreq' mreq6.ipv6mr_interface = interface.ifr_ifindex; ~~~~~~~~~ ^ /home/alex/Downloads/libsocket-master/C/inet/libinetsocket.c:1000:60: error: use of undeclared identifier 'IPV6_ADD_MEMBERSHIP' if ( -1 == check_error(setsockopt(sfd,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,&mreq6,sizeof(struct ipv6_mreq))) )

Temporary solution: Add to ./C/inet/libnetsocket.c:

#ifdef __FreeBSD__
#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
#define IPV6_DROP_MEMBERSHIP    IPV6_LEAVE_GROUP
#endif

Modify line ~960

# ifdef __FreeBSD__
    mreq4.imr_ifindex = interface.ifr_ifru.ifru_index;
#else       
    mreq4.imr_ifindex = interface.ifr_ifindex;
# endif

And modify line ~1005

# ifdef __FreeBSD__
        mreq6.ipv6mr_interface = interface.ifr_ifru.ifru_index;
#else       
        mreq6.ipv6mr_interface = interface.ifr_ifindex;
# endif

Modified file: libinetsocket.c.tar.gz I have attached the modified file. Thanks.

ghost avatar Mar 13 '16 13:03 ghost

Thanks for finding this bug! Can you send me a pull request in order to patch this? (should be easy given that you already have the patched file)

dermesser avatar Mar 14 '16 18:03 dermesser

Ok, I will send pull request soon.

Kind Regards, Alexander

ghost avatar Mar 16 '16 22:03 ghost