iPXE
Data Structures | Macros | Functions
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. More...
 

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. More...
 

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.

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 
)

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:24
static struct uri * uri_get(struct uri *uri)
Increment URI reference count.
Definition: uri.h:195
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition: refcnt.h:65
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
Definition: interface.c:108
A PeerDist multiplexed block download.
Definition: peermux.h:36
static void xferbuf_umalloc_init(struct xfer_buffer *xferbuf)
Initialise umalloc()-based data transfer buffer.
Definition: xferbuf.h:67
struct peerdist_multiplexer * peermux
PeerDist download multiplexer.
Definition: peermux.h:38
static struct interface_descriptor peermux_info_desc
Content information interface descriptor.
Definition: peermux.c:380
A PeerDist download multiplexer.
Definition: peermux.h:56
#define ENOMEM
Not enough space.
Definition: errno.h:535
static void peermux_free(struct refcnt *refcnt)
Free PeerDist download multiplexer.
Definition: peermux.c:48
struct process process
Block download initiation process.
Definition: peermux.h:72
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition: list.h:94
static struct interface_descriptor peermux_block_desc
Block download data transfer interface descriptor.
Definition: peermux.c:397
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662
struct list_head list
List of multiplexed blocks.
Definition: peermux.h:40
struct peerdist_multiplexed_block block[PEERMUX_MAX_BLOCKS]
Block downloads.
Definition: peermux.h:78
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
struct refcnt refcnt
Reference count.
Definition: peermux.h:58
struct interface xfer
Data transfer interface.
Definition: peermux.h:42
struct list_head idle
List of idle block downloads.
Definition: peermux.h:76
static struct process_descriptor peermux_process_desc
Block download initiation process descriptor.
Definition: peermux.c:402
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition: list.h:46
struct interface xfer
Data transfer interface.
Definition: peermux.h:60
static struct interface_descriptor peermux_xfer_desc
Data transfer interface descriptor.
Definition: peermux.c:367
struct list_head busy
List of busy block downloads.
Definition: peermux.h:74
A Uniform Resource Identifier.
Definition: uri.h:65
struct xfer_buffer buffer
Content information data transfer buffer.
Definition: peermux.h:67
#define PEERMUX_MAX_BLOCKS
Maximum number of concurrent block downloads.
Definition: peermux.h:23
struct interface info
Content information interface.
Definition: peermux.h:62
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition: interface.h:204
struct uri * uri
Original URI.
Definition: peermux.h:64
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:107

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().