/*
 * Copyright 2019, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: GPL-2.0-only
 */

procedure PicoSend {
    int write(in int socket_fd, in int len, in int buffer_offset);
    int send(in int socket_fd, in int len, in int buffer_offset);
    /* 
     * dst_addr is expected to be in network order, (1.2.3.4 -> 0x04030201), 
     * remote_port in non-network order (port 9000 -> (uint16_t) 9000)
     */
    int sendto(in int socket_fd, in int len, in int buffer_offset, in uint32_t dst_addr, in uint16_t remote_port);
};
