iPXE
peermux.h File Reference

Peer Content Caching and Retrieval (PeerDist) protocol multiplexer. More...

#include <stdint.h>
#include <ipxe/list.h>
#include <ipxe/refcnt.h>
#include <ipxe/interface.h>
#include <ipxe/process.h>
#include <ipxe/uri.h>
#include <ipxe/xferbuf.h>
#include <ipxe/pccrc.h>

Go to the source code of this file.

Data Structures

struct  peerdist_info_cache
 PeerDist download content information cache. More...
struct  peerdist_multiplexed_block
 A PeerDist multiplexed block download. More...
struct  peerdist_statistics
 PeerDist statistics. More...
struct  peerdist_multiplexer
 A PeerDist download multiplexer. More...

Macros

#define PEERMUX_MAX_BLOCKS   32
 Maximum number of concurrent block downloads.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
int peermux_filter (struct interface *xfer, struct interface *info, struct uri *uri)
 Add PeerDist content-encoding filter.

Detailed Description

Peer Content Caching and Retrieval (PeerDist) protocol multiplexer.

Definition in file peermux.h.

Macro Definition Documentation

◆ PEERMUX_MAX_BLOCKS

#define PEERMUX_MAX_BLOCKS   32

Maximum number of concurrent block downloads.

Definition at line 23 of file peermux.h.

Referenced by peermux_close(), and peermux_filter().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ peermux_filter()

int peermux_filter ( struct interface * xfer,
struct interface * info,
struct uri * uri )
extern

Add PeerDist content-encoding filter.

Parameters
xferData transfer interface
infoContent information interface
uriOriginal URI
Return values
rcReturn status code

Definition at line 413 of file peermux.c.

414 {
415 struct peerdist_multiplexer *peermux;
416 struct peerdist_multiplexed_block *peermblk;
417 unsigned int i;
418
419 /* Allocate and initialise structure */
420 peermux = zalloc ( sizeof ( *peermux ) );
421 if ( ! peermux )
422 return -ENOMEM;
426 peermux->uri = uri_get ( uri );
429 &peermux->refcnt );
432 for ( i = 0 ; i < PEERMUX_MAX_BLOCKS ; i++ ) {
433 peermblk = &peermux->block[i];
434 peermblk->peermux = peermux;
435 list_add_tail ( &peermblk->list, &peermux->idle );
436 intf_init ( &peermblk->xfer, &peermux_block_desc,
437 &peermux->refcnt );
438 }
439
440 /* Attach to parent interfaces, mortalise self, and return */
443 ref_put ( &peermux->refcnt );
444 return 0;
445}
u32 info
Definition ar9003_mac.h:0
#define ENOMEM
Not enough space.
Definition errno.h:535
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
Definition interface.c:108
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition interface.h:204
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition list.h:94
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition list.h:46
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:662
static struct interface_descriptor peermux_block_desc
Block download data transfer interface descriptor.
Definition peermux.c:397
static void peermux_free(struct refcnt *refcnt)
Free PeerDist download multiplexer.
Definition peermux.c:48
static struct interface_descriptor peermux_xfer_desc
Data transfer interface descriptor.
Definition peermux.c:367
static struct process_descriptor peermux_process_desc
Block download initiation process descriptor.
Definition peermux.c:402
static struct interface_descriptor peermux_info_desc
Content information interface descriptor.
Definition peermux.c:380
#define PEERMUX_MAX_BLOCKS
Maximum number of concurrent block downloads.
Definition peermux.h:23
static void process_init_stopped(struct process *process, struct process_descriptor *desc, struct refcnt *refcnt)
Initialise process without adding to process list.
Definition process.h:146
#define ref_put(refcnt)
Drop reference to object.
Definition refcnt.h:107
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition refcnt.h:65
A PeerDist multiplexed block download.
Definition peermux.h:36
struct peerdist_multiplexer * peermux
PeerDist download multiplexer.
Definition peermux.h:38
struct interface xfer
Data transfer interface.
Definition peermux.h:42
struct list_head list
List of multiplexed blocks.
Definition peermux.h:40
A PeerDist download multiplexer.
Definition peermux.h:56
struct xfer_buffer buffer
Content information data transfer buffer.
Definition peermux.h:67
struct list_head idle
List of idle block downloads.
Definition peermux.h:76
struct peerdist_multiplexed_block block[PEERMUX_MAX_BLOCKS]
Block downloads.
Definition peermux.h:78
struct interface info
Content information interface.
Definition peermux.h:62
struct list_head busy
List of busy block downloads.
Definition peermux.h:74
struct refcnt refcnt
Reference count.
Definition peermux.h:58
struct uri * uri
Original URI.
Definition peermux.h:64
struct process process
Block download initiation process.
Definition peermux.h:72
struct interface xfer
Data transfer interface.
Definition peermux.h:60
A Uniform Resource Identifier.
Definition uri.h:65
static struct uri * uri_get(struct uri *uri)
Increment URI reference count.
Definition uri.h:195
static void xferbuf_umalloc_init(struct xfer_buffer *xferbuf)
Initialise umalloc()-based data transfer buffer.
Definition xferbuf.h:67

References peerdist_multiplexer::block, peerdist_multiplexer::buffer, peerdist_multiplexer::busy, ENOMEM, peerdist_multiplexer::idle, info, peerdist_multiplexer::info, INIT_LIST_HEAD, intf_init(), intf_plug_plug(), peerdist_multiplexed_block::list, list_add_tail, peerdist_multiplexed_block::peermux, peermux_block_desc, peermux_free(), peermux_info_desc, PEERMUX_MAX_BLOCKS, peermux_process_desc, peermux_xfer_desc, peerdist_multiplexer::process, process_init_stopped(), ref_init, ref_put, peerdist_multiplexer::refcnt, peerdist_multiplexer::uri, uri_get(), peerdist_multiplexed_block::xfer, peerdist_multiplexer::xfer, xferbuf_umalloc_init(), and zalloc().

Referenced by http_peerdist_init().