114 DBGC (
ping,
"PING %p reply id %#04x seq %#04x\n",
173 &
ping->peer ) ) != 0 ) {
174 DBGC (
ping,
"PING %p could not transmit: %s\n",
242 DBGC (
ping,
"PING %p could not bind: %s\n",
#define iob_pull(iobuf, len)
An object interface operation.
struct arbelprm_rc_send_wqe rc
void intf_close(struct interface *intf, int rc)
Close an object interface.
struct list_head list
List of ping connections.
static struct interface_descriptor ping_xfer_desc
Ping data transfer interface descriptor.
void intf_shutdown(struct interface *intf, int rc)
Shut down an object interface.
int icmp_tx_echo_request(struct io_buffer *iobuf, struct sockaddr_tcpip *st_dest)
Transmit ICMP echo request.
An ICMP echo request/reply.
#define list_add(new, head)
Add a new entry to the head of a list.
#define XFER_FL_ABS_OFFSET
Offset is absolute.
#define ref_init(refcnt, free)
Initialise a reference counter.
#define iob_push(iobuf, len)
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
#define EADDRINUSE
Address already in use.
static int ping_open(struct interface *xfer, struct sockaddr *peer, struct sockaddr *local)
Open a ping connection.
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
int ping_sock_echo
Linkage hack.
struct io_buffer * xfer_alloc_iob(struct interface *intf, size_t len)
Allocate I/O buffer.
static struct interface_operation ping_xfer_operations[]
Ping data transfer interface operations.
struct io_buffer * alloc_iob(size_t len)
Allocate I/O buffer.
int semantics
Communication semantics (e.g.
int tcpip_bind(struct sockaddr_tcpip *st_local, int(*available)(int port))
Bind to local TCP/IP port.
A doubly-linked list entry (or list head)
Data transfer interfaces.
struct interface xfer
Data transfer interface.
#define list_del(list)
Delete an entry from a list.
#define ENOMEM
Not enough space.
#define iob_disown(iobuf)
Disown an I/O buffer.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static int ping_deliver(struct ping_connection *ping, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram as I/O buffer.
static struct ping_connection * ping_demux(unsigned int port)
Identify ping connection by local port number.
#define MAX_LL_NET_HEADER_LEN
Maximum combined length of a link-layer and network-layer header.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
#define __unused
Declare a variable or data structure as unused.
Transport-network layer interface.
#define ENOTCONN
The socket is not connected.
Generalized socket address structure.
An object interface descriptor.
char * strerror(int errno)
Retrieve string representation of error number.
void * zalloc(size_t size)
Allocate cleared memory.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
#define INTF_OP(op_type, object_type, op_func)
Define an object interface operation.
int xfer_deliver(struct interface *intf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram.
Data transfer interface opening.
int ping_rx(struct io_buffer *iobuf, struct sockaddr_tcpip *st_src)
Process ICMP ping reply.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
static struct io_buffer * ping_alloc_iob(struct ping_connection *ping __unused, size_t len)
Allocate I/O buffer for ping.
Network device management.
#define iob_reserve(iobuf, len)
#define INTF_DESC(object_type, intf, operations)
Define an object interface descriptor.
static int ping_port_available(int port)
Check if local port number is available.
struct sockaddr_tcpip peer
Remote socket address.
void * data
Start of data.
static void ping_close(struct ping_connection *ping, int rc)
Close ping connection.
struct mschapv2_challenge peer
Peer challenge.
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
uint16_t port
Local port number.
#define NULL
NULL pointer (VOID *)
static LIST_HEAD(ping_conns)
List of registered ping connections.
#define ref_put(refcnt)
Drop reference to object.
int ping(const char *hostname, unsigned long timeout, size_t len, unsigned int count, int quiet)
Ping a host.
void * memset(void *dest, int character, size_t len) __nonnull
struct socket_opener ping_socket_opener __socket_opener
Ping socket opener.