ip.h¶
Raw IPv4/IPv6 sock definitions.
-
struct sock_ip
sock_ip_t
¶ Type for a raw IPv4/IPv6 sock object.
Note
API implementors:
struct sock_ip
needs to be defined by implementation-specificsock_types.h
.
-
int
sock_ip_create
(ip.h::sock_ip_t
* sock, const sock_ip_ep_t * local, const sock_ip_ep_t * remote, uint8_t proto, uint16_t flags)¶ Creates a new raw IPv4/IPv6 sock object.
Parameters
sock: The resulting sock object. local: Local end point for the sock object. May be NULL. sock.h::sock_ip_ep_t::netif
must either besock.h::SOCK_ADDR_ANY_NETIF
or equal tosock.h::sock_ip_ep_t::netif
ofremote
ifremote != NULL
. If NULLip.h::sock_ip_send()
may bind implicitly.remote: Remote end point for the sock object. May be NULL
but then theremote
parameter ofip.h::sock_ip_send()
may not beNULL
or it will always error with return value -ENOTCONN. sock_ip_ep_t::port may not be 0 ifremote != NULL
.sock.h::sock_ip_ep_t::netif
must either besock.h::SOCK_ADDR_ANY_NETIF
or equal tosock.h::sock_ip_ep_t::netif
oflocal
iflocal != NULL
.proto: Protocol to use in the raw IPv4/IPv6 sock object (the protocol
header field in IPv4 and thenext_header
field in IPv6).flags: Flags for the sock object. See also [sock flags](net_sock_flags). May be 0. Return values
- 0 on success.
- -EADDRINUSE, if
local != NULL
andlocal
is already used elsewhere - -EAFNOSUPPORT, if
local != NULL
orremote != NULL
andsock.h::sock_ip_ep_t::family
oflocal
orremote
is not supported. - -EINVAL, if
sock.h::sock_ip_ep_t::addr
ofremote
is an invalid address. - -EINVAL, if
sock.h::sock_ip_ep_t::netif
oflocal
orremote
are not valid interfaces or contradict each other (i.e. `(local->netif != remote->netif) && ((local->netif != SOCK_ADDR_ANY_NETIF) || (remote->netif != SOCK_ADDR_ANY_NETIF))if neither is
NULL). @return -ENOMEM, if not enough resources can be provided for
sock` to be created. - -EPROTONOSUPPORT, if
local != NULL
orremote != NULL
and proto is not supported bysock.h::sock_ip_ep_t::family
oflocal
orremote
.
-
void
sock_ip_close
(ip.h::sock_ip_t
* sock)¶ Closes a raw IPv4/IPv6 sock object.
Parameters
sock: A raw IPv4/IPv6 sock object.
-
int
sock_ip_get_local
(ip.h::sock_ip_t
* sock, sock_ip_ep_t * ep)¶ Gets the local end point of a raw IPv4/IPv6 sock object.
This gets the local end point of a raw IPv4/IPv6 sock object. Note that this might not be the same end point you added in
ip.h::sock_ip_create()
, but an end point more suitable for the implementation. Examples for this might be that ifsock.h::sock_ip_ep_t::netif
is given inip.h::sock_ip_create()
, the implementation might choose to return the address on this interface thesock
is bound to inep's
sock.h::sock_ip_ep_t::addr
.Parameters
sock: A raw IPv4/IPv6 sock object. ep: The local end point. Return values
- 0 on success.
- -EADDRNOTAVAIL, when
sock
has no end point bound to it.
-
int
sock_ip_get_remote
(ip.h::sock_ip_t
* sock, sock_ip_ep_t * ep)¶ Gets the remote end point of a UDP sock object.
This gets the remote end point of a raw IPv4/IPv6 sock object. Note that this might not be the same end point you added in
ip.h::sock_ip_create()
, but an end point more suitable for the implementation. Examples for this might be that ifsock.h::sock_ip_ep_t::netif
is given inip.h::sock_ip_create()
, the implementation might choose to return the address on this interface thesock
is bound to inep's
sock.h::sock_ip_ep_t::addr
.Parameters
sock: A UDP sock object. ep: The remote end point. Return values
- 0 on success.
- -ENOTCONN, when
sock
has no remote end point bound to it.
-
msp430_types.h::ssize_t
sock_ip_recv
(ip.h::sock_ip_t
* sock, void * data,msp430_types.h::size_t
max_len, uint32_t timeout, sock_ip_ep_t * remote)¶ Receives a message over IPv4/IPv6 from remote end point.
Parameters
sock: A raw IPv4/IPv6 sock object. data: Pointer where the received data should be stored. max_len: Maximum space available at data
.timeout: Timeout for receive in microseconds. If 0 and no data is available, the function returns immediately. May be sock.h::SOCK_NO_TIMEOUT
for no timeout (wait until data is available).remote: Remote end point of the received data. May be NULL, if it is not required by the application. Note
Function blocks if no packet is currently waiting.
Return values
- The number of bytes received on success.
- 0, if no received data is available, but everything is in order.
- -EADDRNOTAVAIL, if local of
sock
is not given. - -EAGAIN, if
timeout
is0
and no data is available. - -EINVAL, if
remote
is invalid orsock
is not properly initialized (or closed whileip.h::sock_ip_recv()
blocks). - -ENOBUFS, if buffer space is not large enough to store received data.
- -ENOMEM, if no memory was available to receive
data
. - -EPROTO, if source address of received packet did not equal the remote of
sock
. - -ETIMEDOUT, if
timeout
expired.
-
msp430_types.h::ssize_t
sock_ip_send
(ip.h::sock_ip_t
* sock, const void * data,msp430_types.h::size_t
len, uint8_t proto, const sock_ip_ep_t * remote)¶ Sends a message over IPv4/IPv6 to remote end point.
Parameters
sock: A raw IPv4/IPv6 sock object. May be NULL. A sensible local end point should be selected by the implementation in that case. data: Pointer where the received data should be stored. May be NULL
iflen == 0
.len: Maximum space available at data
.proto: Protocol to use in the packet sent, in case sock == NULL
. Ifsock != NULL
this parameter will be ignored.remote: Remote end point for the sent data. May be NULL
, ifsock
has a remote end point.sock.h::sock_ip_ep_t::family
may be AF_UNSPEC, if local end point ofsock
provides this information.Return values
- The number of bytes sent on success.
- -EAFNOSUPPORT, if
remote != NULL
andsock.h::sock_ip_ep_t::family
ofremote
is != AF_UNSPEC and not supported. - -EINVAL, if
sock.h::sock_ip_ep_t::addr
ofremote
is an invalid address. - -EINVAL, if
sock.h::sock_ip_ep_t::netif
ofremote
is not a valid interface or contradicts the local interface ofsock
. - -EHOSTUNREACH, if
remote
or remote end point ofsock
is not reachable. - -ENOMEM, if no memory was available to send
data
. - -ENOTCONN, if
remote == NULL
, butsock
has no remote end point. - -EPROTOTYPE, if
sock == NULL
andproto
is not bysock.h::sock_ip_ep_t::family
ofremote
.