47#define EPROTO_LEN __einfo_error ( EINFO_EPROTO_LEN )
48#define EINFO_EPROTO_LEN __einfo_uniqify ( EINFO_EPROTO, 0x01, \
49 "Incorrect reply length" )
50#define EPROTO_DATA __einfo_error ( EINFO_EPROTO_DATA )
51#define EINFO_EPROTO_DATA __einfo_uniqify ( EINFO_EPROTO, 0x02, \
52 "Incorrect reply data" )
53#define EPROTO_SEQ __einfo_error ( EINFO_EPROTO_SEQ )
54#define EINFO_EPROTO_SEQ __einfo_uniqify ( EINFO_EPROTO, 0x03, \
55 "Delayed or out-of-sequence reply" )
106 bytes[i] = ( i & 0xff );
122 if (
bytes[i] != ( i & 0xff ) )
195 DBGC (
pinger,
"PINGER %p could not allocate I/O buffer\n",
210 DBGC (
pinger,
"PINGER %p could not transmit: %s\n",
240 DBGC (
pinger,
"PINGER %p received incorrect length %zd "
255 DBGC (
pinger,
"PINGER %p received sequence %d (expected %d)\n",
316 unsigned int sequence,
size_t len,
341 hostname,
NULL ) ) != 0 ) {
342 DBGC (
pinger,
"PINGER %p could not open socket: %s\n",
#define NULL
NULL pointer (VOID *)
struct arbelprm_rc_send_wqe rc
uint8_t data[48]
Additional event data.
uint8_t meta
Metadata flags.
#define __unused
Declare a variable or data structure as unused.
static unsigned int count
Number of entries.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define EINVAL
Invalid argument.
#define ETIMEDOUT
Connection timed out.
#define ENOMEM
Not enough space.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
void * memset(void *dest, int character, size_t len) __nonnull
void intf_close(struct interface *intf, int rc)
Close an object interface.
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
void intf_shutdown(struct interface *intf, int rc)
Shut down an object interface.
#define INTF_DESC(object_type, intf, operations)
Define an object interface descriptor.
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
#define INTF_OP(op_type, object_type, op_func)
Define an object interface operation.
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
#define iob_put(iobuf, len)
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
void * zalloc(size_t size)
Allocate cleared memory.
Data transfer interface opening.
static void pinger_generate(struct pinger *pinger, void *data)
Generate payload.
static void pinger_window_changed(struct pinger *pinger)
Handle data transfer window change.
static struct interface_descriptor pinger_xfer_desc
Pinger data transfer interface descriptor.
static void pinger_close(struct pinger *pinger, int rc)
Close pinger.
static int pinger_deliver(struct pinger *pinger, struct io_buffer *iobuf, struct xfer_metadata *meta)
Handle received data.
static struct interface_descriptor pinger_job_desc
Pinger job control interface descriptor.
static int pinger_verify(struct pinger *pinger, const void *data)
Verify payload.
static void pinger_expired(struct retry_timer *timer, int over __unused)
Handle timer expiry.
static struct interface_operation pinger_job_op[]
Pinger job control interface operations.
int create_pinger(struct interface *job, const char *hostname, unsigned long timeout, size_t len, unsigned int count, void(*callback)(struct sockaddr *src, unsigned int sequence, size_t len, int rc))
Create pinger.
static struct interface_operation pinger_xfer_op[]
Pinger data transfer interface operations.
#define ref_put(refcnt)
Drop reference to object.
#define ref_init(refcnt, free)
Initialise a reference counter.
int xfer_open_named_socket(struct interface *xfer, int semantics, struct sockaddr *peer, const char *name, struct sockaddr *local)
Open named socket.
void start_timer_fixed(struct retry_timer *timer, unsigned long timeout)
Start timer with a specified timeout.
void stop_timer(struct retry_timer *timer)
Stop timer.
static void start_timer_nodelay(struct retry_timer *timer)
Start timer with no delay.
#define container_of(ptr, type, field)
Get containing structure.
char * strerror(int errno)
Retrieve string representation of error number.
An object interface descriptor.
An object interface operation.
void * data
Start of data.
unsigned int remaining
Number of remaining expiry events (zero to continue indefinitely)
int pending
Response for current sequence number is still pending.
struct interface job
Job control interface.
struct retry_timer timer
Timer.
unsigned long timeout
Timeout.
void(* callback)(struct sockaddr *src, unsigned int sequence, size_t len, int rc)
Callback function.
size_t len
Payload length.
uint16_t sequence
Current sequence number.
struct refcnt refcnt
Reference count.
struct interface xfer
Data transfer interface.
Generalized socket address structure.
size_t xfer_window(struct interface *intf)
Check flow control window.
int xfer_deliver(struct interface *intf, struct io_buffer *iobuf, struct xfer_metadata *meta)
Deliver datagram.
struct io_buffer * xfer_alloc_iob(struct interface *intf, size_t len)
Allocate I/O buffer.
void xfer_window_changed(struct interface *intf)
Report change of flow control window.
Data transfer interfaces.
#define XFER_FL_ABS_OFFSET
Offset is absolute.