All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala-native.netinet.in.c Maven / Gradle / Ivy

There is a newer version: 0.5.5
Show newest version
#if defined(SCALANATIVE_COMPILE_ALWAYS) ||                                     \
    defined(__SCALANATIVE_POSIX_NETINET_IN)
#include 
#include 
#include "in.h"

#if !(defined __STDC_VERSION__) || (__STDC_VERSION__ < 201112L)
#ifndef SCALANATIVE_SUPPRESS_STRUCT_CHECK_WARNING
#warning "Size and order of C structures are not checked when -std < c11."
#endif
#else
// Posix defines the name and type of required fields. Size of fields
// and any internal or tail padding are left unspecified. This section
// verifies that the C and Scala Native definitions match in each compilation
// environment.

// IPv4
_Static_assert(sizeof(struct scalanative_sockaddr_in) == 16,
               "Unexpected size: scalanative_sockaddr_in");

_Static_assert(sizeof(struct scalanative_sockaddr_in) ==
                   sizeof(struct sockaddr_in),
               "Unexpected size: os sockaddr_in");

// On systems which define/use IETF RFC SIN6_LEN macro, sin_family &
// sin_len are synthesized fields, managed by Ops access routines in in.scala.
// C offsetof() sin_family will be 2 for the OS sockaddr_in, but strictly 0 for
// scalanative_sockaddr_in. Scala access routines will access the
// expected bytes.

_Static_assert(offsetof(struct scalanative_sockaddr_in, sin_family) == 0,
               "Unexpected offset: scalanative_sockaddr_in.sin_family");

_Static_assert(offsetof(struct scalanative_sockaddr_in, sin_port) ==
                   offsetof(struct sockaddr_in, sin_port),
               "Unexpected offset: sockaddr_in.sin_port");

_Static_assert(offsetof(struct scalanative_sockaddr_in, sin_addr) ==
                   offsetof(struct sockaddr_in, sin_addr),
               "Unexpected offset: sockaddr_in.sin_addr");
// IPv6
_Static_assert(sizeof(struct scalanative_sockaddr_in6) == 28,
               "Unexpected size: scalanative_sockaddr_in6");

_Static_assert(sizeof(struct scalanative_sockaddr_in6) ==
                   sizeof(struct sockaddr_in6),
               "Unexpected size: os sockaddr_in");

// For systems which define/use IETF RFC SIN6_LEN macro, sin6_family &
// sin6_len see comment above for corresponding scalanative_sockaddr_in6.

_Static_assert(offsetof(struct scalanative_sockaddr_in6, sin6_family) == 0,
               "Unexpected offset: scalanative_sockaddr_in6.sin6_family");

_Static_assert(offsetof(struct scalanative_sockaddr_in6, sin6_port) ==
                   offsetof(struct sockaddr_in6, sin6_port),
               "Unexpected offset: sockaddr_in6.sin6_port");

_Static_assert(offsetof(struct scalanative_sockaddr_in6, sin6_flowinfo) ==
                   offsetof(struct sockaddr_in6, sin6_flowinfo),
               "Unexpected offset: sockaddr_in6.sin6_flowinfo");

_Static_assert(offsetof(struct scalanative_sockaddr_in6, sin6_addr) ==
                   offsetof(struct sockaddr_in6, sin6_addr),
               "Unexpected offset: sockaddr_in6.sin6_addr");

_Static_assert(offsetof(struct scalanative_sockaddr_in6, sin6_scope_id) ==
                   offsetof(struct sockaddr_in6, sin6_scope_id),
               "Unexpected offset: sockaddr_in6.sin6_scope_id");

#endif // structure checking

int scalanative_ipproto_ip() { return IPPROTO_IP; }

int scalanative_ipproto_ipv6() { return IPPROTO_IPV6; }

int scalanative_ipproto_icmp() { return IPPROTO_ICMP; }

int scalanative_ipproto_raw() { return IPPROTO_RAW; }

int scalanative_ipproto_tcp() { return IPPROTO_TCP; }

int scalanative_ipproto_udp() { return IPPROTO_UDP; }

uint32_t scalanative_inaddr_any() { return INADDR_ANY; }

uint32_t scalanative_inaddr_broadcast() { return INADDR_BROADCAST; }

int scalanative_inet6_addrstrlen() { return INET6_ADDRSTRLEN; }

int scalanative_inet_addrstrlen() { return INET_ADDRSTRLEN; }

int scalanative_ipv6_join_group() { return IPV6_JOIN_GROUP; }

int scalanative_ipv6_leave_group() { return IPV6_LEAVE_GROUP; }

int scalanative_ipv6_multicast_hops() { return IPV6_MULTICAST_HOPS; }

int scalanative_ipv6_multicast_if() { return IPV6_MULTICAST_IF; }

int scalanative_ipv6_multicast_loop() { return IPV6_MULTICAST_LOOP; }

int scalanative_ipv6_unicast_hops() { return IPV6_UNICAST_HOPS; }

int scalanative_ipv6_v6only() { return IPV6_V6ONLY; }

int scalanative_ip_multicast_if() { return IP_MULTICAST_IF; }

int scalanative_ip_multicast_loop() { return IP_MULTICAST_LOOP; }

int scalanative_ip_tos() { return IP_TOS; }

int scalanative_in6_is_addr_unspecified(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_UNSPECIFIED((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_loopback(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_LOOPBACK((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_multicast(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_MULTICAST((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_linklocal(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_sitelocal(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_SITELOCAL((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_v4mapped(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_V4MAPPED((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_v4compat(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_V4COMPAT((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_mc_nodelocal(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_MC_NODELOCAL((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_mc_linklocal(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_MC_LINKLOCAL((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_mc_sitelocal(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_MC_SITELOCAL((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_mc_orglocal(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_MC_ORGLOCAL((struct in6_addr *)arg);
}

int scalanative_in6_is_addr_mc_global(struct scalanative_in6_addr *arg) {
    return IN6_IS_ADDR_MC_GLOBAL((struct in6_addr *)arg);
}
#endif




© 2015 - 2024 Weber Informatics LLC | Privacy Policy