wccp2.cc File Reference
#include "squid.h"
#include "cache_cf.h"
#include "comm.h"
#include "comm/Connection.h"
#include "comm/Loops.h"
#include "ConfigParser.h"
#include "event.h"
#include "ip/Address.h"
#include "md5.h"
#include "Parsing.h"
#include "SquidConfig.h"
#include "Store.h"
#include "wccp2.h"
Include dependency graph for wccp2.cc:

Go to the source code of this file.

Classes

struct  wccp2_item_header_t
 
struct  wccp2_message_header_t
 
struct  wccp2_security_none_t
 
struct  wccp2_security_md5_t
 
struct  wccp2_service_info_t
 
struct  wccp2_cache_identity_info_t
 
struct  wccp2_identity_info_t
 
struct  wccp2_mask_element_t
 
struct  wccp2_cache_mask_identity_info_t
 
struct  wccp2_mask_identity_info_t
 
struct  wccp2_cache_view_header_t
 
struct  wccp2_cache_view_info_t
 
struct  wccp2_router_id_element_t
 
struct  wccp2_capability_info_header_t
 
struct  wccp2_capability_element_t
 
struct  wccp2_value_element_t
 
struct  wccp2_i_see_you_t
 
struct  wccp2_router_assign_element_t
 
struct  router_identity_info_t
 
struct  cache_mask_info_t
 
struct  assignment_key_t
 
struct  router_view_t
 
struct  wccp2_cache_list_t
 
struct  wccp2_router_list_t
 
struct  wccp2_service_list_t
 

Macros

#define WCCP_PORT   2048
 
#define WCCP_RESPONSE_SIZE   12448
 
#define WCCP_BUCKETS   256
 
#define WCCP2_HASH_ASSIGNMENT   0x00
 
#define WCCP2_MASK_ASSIGNMENT   0x01
 
#define WCCP2_NONE_SECURITY_LEN   0
 
#define WCCP2_MD5_SECURITY_LEN   SQUID_MD5_DIGEST_LENGTH
 
#define WCCP2_NUMPORTS   8
 
#define WCCP2_PASSWORD_LEN   8 + 1 /* + 1 for C-string NUL terminator */
 
#define WCCP2_SECURITY_INFO   0
 
#define WCCP2_SERVICE_INFO   1
 
#define WCCP2_ROUTER_ID_INFO   2
 
#define WCCP2_WC_ID_INFO   3
 
#define WCCP2_RTR_VIEW_INFO   4
 
#define WCCP2_WC_VIEW_INFO   5
 
#define WCCP2_REDIRECT_ASSIGNMENT   6
 
#define WCCP2_QUERY_INFO   7
 
#define WCCP2_CAPABILITY_INFO   8
 
#define WCCP2_ALT_ASSIGNMENT   13
 
#define WCCP2_ASSIGN_MAP   14
 
#define WCCP2_COMMAND_EXTENSION   15
 
#define WCCP2_VERSION   0x200
 
#define WCCP2_HERE_I_AM   10
 
#define WCCP2_I_SEE_YOU   11
 
#define WCCP2_REDIRECT_ASSIGN   12
 
#define WCCP2_REMOVAL_QUERY   13
 
#define WCCP2_NO_SECURITY   0
 
#define WCCP2_MD5_SECURITY   1
 
#define WCCP2_SERVICE_STANDARD   0
 
#define WCCP2_SERVICE_DYNAMIC   1
 
#define WCCP2_SERVICE_ID_HTTP   0x00
 
#define WCCP2_SERVICE_SRC_IP_HASH   0x1
 
#define WCCP2_SERVICE_DST_IP_HASH   0x2
 
#define WCCP2_SERVICE_SRC_PORT_HASH   0x4
 
#define WCCP2_SERVICE_DST_PORT_HASH   0x8
 
#define WCCP2_SERVICE_PORTS_DEFINED   0x10
 
#define WCCP2_SERVICE_PORTS_SOURCE   0x20
 
#define WCCP2_SERVICE_SRC_IP_ALT_HASH   0x100
 
#define WCCP2_SERVICE_DST_IP_ALT_HASH   0x200
 
#define WCCP2_SERVICE_SRC_PORT_ALT_HASH   0x400
 
#define WCCP2_SERVICE_DST_PORT_ALT_HASH   0x800
 
#define WCCP2_MASK_ASSIGNMENT_DATA   (0x2)
 
#define WCCP2_CAPABILITY_FORWARDING_METHOD   0x01
 
#define WCCP2_CAPABILITY_ASSIGNMENT_METHOD   0x02
 
#define WCCP2_CAPABILITY_RETURN_METHOD   0x03
 
#define WCCP2_METHOD_GRE   0x00000001
 
#define WCCP2_METHOD_L2   0x00000002
 
#define WCCP2_FORWARDING_METHOD_GRE   WCCP2_METHOD_GRE
 
#define WCCP2_FORWARDING_METHOD_L2   WCCP2_METHOD_L2
 
#define WCCP2_ASSIGNMENT_METHOD_HASH   0x00000001
 
#define WCCP2_ASSIGNMENT_METHOD_MASK   0x00000002
 
#define WCCP2_PACKET_RETURN_METHOD_GRE   WCCP2_METHOD_GRE
 
#define WCCP2_PACKET_RETURN_METHOD_L2   WCCP2_METHOD_L2
 

Functions

static void wccp2_add_service_list (int service, int service_id, int service_priority, int service_proto, int service_flags, int ports[], int security_type, char *password)
 
static void wccp2SortCacheList (struct wccp2_cache_list_t *head)
 
static void wccp2InitServices (void)
 
static void wccp2_update_service (struct wccp2_service_list_t *srv, int service, int service_id, int service_priority, int service_proto, int service_flags, int ports[])
 
static struct wccp2_service_list_twccp2_get_service_by_id (int service, int service_id)
 
static char wccp2_update_md5_security (char *password, char *ptr, char *packet, int len)
 
static char wccp2_check_security (struct wccp2_service_list_t *srv, char *security, char *packet, int len)
 
void wccp2Init (void)
 
void wccp2ConnectionOpen (void)
 
void wccp2ConnectionClose (void)
 
static void CheckSectionLength (const void *sectionStart, const size_t sectionLength, const void *wholeStart, const size_t wholeSize, const char *error)
 
template<class FieldHeader >
static size_t CheckFieldDataLength (const FieldHeader *header, const size_t dataLength, const void *areaStart, const size_t areaSize, const char *error)
 
template<class Field >
static void SetField (Field *&field, const void *fieldStart, const void *areaStart, const size_t areaSize, const char *error)
 
static void wccp2HandleUdp (int sock, void *)
 
static void wccp2HereIam (void *)
 
static void wccp2AssignBuckets (void *)
 
void parse_wccp2_method (int *method)
 
void dump_wccp2_method (StoreEntry *e, const char *label, int v)
 
void free_wccp2_method (int *)
 
void parse_wccp2_amethod (int *method)
 
void dump_wccp2_amethod (StoreEntry *e, const char *label, int v)
 
void free_wccp2_amethod (int *)
 
void parse_wccp2_service (void *)
 
void dump_wccp2_service (StoreEntry *e, const char *label, void *)
 
void free_wccp2_service (void *)
 
int check_null_wccp2_service (void *)
 
static int parse_wccp2_service_flags (char *flags)
 
static void parse_wccp2_service_ports (char *options, int portlist[])
 
void parse_wccp2_service_info (void *)
 
void dump_wccp2_service_info (StoreEntry *e, const char *label, void *)
 
void free_wccp2_service_info (void *)
 

Variables

static int theWccp2Connection = -1
 
static int wccp2_connected = 0
 
static PF wccp2HandleUdp
 
static EVH wccp2HereIam
 
static EVH wccp2AssignBuckets
 
static struct wccp2_message_header_t wccp2_here_i_am_header
 
static struct wccp2_identity_info_t wccp2_identity_info
 
static struct wccp2_mask_identity_info_t wccp2_mask_identity_info
 
static struct wccp2_cache_view_header_t wccp2_cache_view_header
 
static struct wccp2_cache_view_info_t wccp2_cache_view_info
 
static struct wccp2_capability_info_header_t wccp2_capability_info_header
 
static struct wccp2_capability_element_t wccp2_capability_element
 
static struct wccp2_i_see_you_t wccp2_i_see_you
 
static int wccp2_numrouters
 
static struct wccp2_service_list_twccp2_service_list_head = nullptr
 
int empty_portlist [WCCP2_NUMPORTS] = {0, 0, 0, 0, 0, 0, 0, 0}
 

Macro Definition Documentation

◆ WCCP2_ALT_ASSIGNMENT

#define WCCP2_ALT_ASSIGNMENT   13

Definition at line 76 of file wccp2.cc.

◆ WCCP2_ASSIGN_MAP

#define WCCP2_ASSIGN_MAP   14

Definition at line 77 of file wccp2.cc.

◆ WCCP2_ASSIGNMENT_METHOD_HASH

#define WCCP2_ASSIGNMENT_METHOD_HASH   0x00000001

Definition at line 318 of file wccp2.cc.

◆ WCCP2_ASSIGNMENT_METHOD_MASK

#define WCCP2_ASSIGNMENT_METHOD_MASK   0x00000002

Definition at line 319 of file wccp2.cc.

◆ WCCP2_CAPABILITY_ASSIGNMENT_METHOD

#define WCCP2_CAPABILITY_ASSIGNMENT_METHOD   0x02

Definition at line 306 of file wccp2.cc.

◆ WCCP2_CAPABILITY_FORWARDING_METHOD

#define WCCP2_CAPABILITY_FORWARDING_METHOD   0x01

Definition at line 305 of file wccp2.cc.

◆ WCCP2_CAPABILITY_INFO

#define WCCP2_CAPABILITY_INFO   8

Definition at line 75 of file wccp2.cc.

◆ WCCP2_CAPABILITY_RETURN_METHOD

#define WCCP2_CAPABILITY_RETURN_METHOD   0x03

Definition at line 307 of file wccp2.cc.

◆ WCCP2_COMMAND_EXTENSION

#define WCCP2_COMMAND_EXTENSION   15

Definition at line 78 of file wccp2.cc.

◆ WCCP2_FORWARDING_METHOD_GRE

#define WCCP2_FORWARDING_METHOD_GRE   WCCP2_METHOD_GRE

Definition at line 315 of file wccp2.cc.

◆ WCCP2_FORWARDING_METHOD_L2

#define WCCP2_FORWARDING_METHOD_L2   WCCP2_METHOD_L2

Definition at line 316 of file wccp2.cc.

◆ WCCP2_HASH_ASSIGNMENT

#define WCCP2_HASH_ASSIGNMENT   0x00

Definition at line 45 of file wccp2.cc.

◆ WCCP2_HERE_I_AM

#define WCCP2_HERE_I_AM   10

Definition at line 93 of file wccp2.cc.

◆ WCCP2_I_SEE_YOU

#define WCCP2_I_SEE_YOU   11

Definition at line 94 of file wccp2.cc.

◆ WCCP2_MASK_ASSIGNMENT

#define WCCP2_MASK_ASSIGNMENT   0x01

Definition at line 46 of file wccp2.cc.

◆ WCCP2_MASK_ASSIGNMENT_DATA

#define WCCP2_MASK_ASSIGNMENT_DATA   (0x2)

Definition at line 219 of file wccp2.cc.

◆ WCCP2_MD5_SECURITY

#define WCCP2_MD5_SECURITY   1

Definition at line 111 of file wccp2.cc.

◆ WCCP2_MD5_SECURITY_LEN

#define WCCP2_MD5_SECURITY_LEN   SQUID_MD5_DIGEST_LENGTH

Definition at line 49 of file wccp2.cc.

◆ WCCP2_METHOD_GRE

#define WCCP2_METHOD_GRE   0x00000001

Definition at line 312 of file wccp2.cc.

◆ WCCP2_METHOD_L2

#define WCCP2_METHOD_L2   0x00000002

Definition at line 313 of file wccp2.cc.

◆ WCCP2_NO_SECURITY

#define WCCP2_NO_SECURITY   0

Definition at line 110 of file wccp2.cc.

◆ WCCP2_NONE_SECURITY_LEN

#define WCCP2_NONE_SECURITY_LEN   0

Definition at line 48 of file wccp2.cc.

◆ WCCP2_NUMPORTS

#define WCCP2_NUMPORTS   8

Definition at line 52 of file wccp2.cc.

◆ WCCP2_PACKET_RETURN_METHOD_GRE

#define WCCP2_PACKET_RETURN_METHOD_GRE   WCCP2_METHOD_GRE

Definition at line 321 of file wccp2.cc.

◆ WCCP2_PACKET_RETURN_METHOD_L2

#define WCCP2_PACKET_RETURN_METHOD_L2   WCCP2_METHOD_L2

Definition at line 322 of file wccp2.cc.

◆ WCCP2_PASSWORD_LEN

#define WCCP2_PASSWORD_LEN   8 + 1 /* + 1 for C-string NUL terminator */

Definition at line 53 of file wccp2.cc.

◆ WCCP2_QUERY_INFO

#define WCCP2_QUERY_INFO   7

Definition at line 74 of file wccp2.cc.

◆ WCCP2_REDIRECT_ASSIGN

#define WCCP2_REDIRECT_ASSIGN   12

Definition at line 95 of file wccp2.cc.

◆ WCCP2_REDIRECT_ASSIGNMENT

#define WCCP2_REDIRECT_ASSIGNMENT   6

Definition at line 73 of file wccp2.cc.

◆ WCCP2_REMOVAL_QUERY

#define WCCP2_REMOVAL_QUERY   13

Definition at line 96 of file wccp2.cc.

◆ WCCP2_ROUTER_ID_INFO

#define WCCP2_ROUTER_ID_INFO   2

Definition at line 69 of file wccp2.cc.

◆ WCCP2_RTR_VIEW_INFO

#define WCCP2_RTR_VIEW_INFO   4

Definition at line 71 of file wccp2.cc.

◆ WCCP2_SECURITY_INFO

#define WCCP2_SECURITY_INFO   0

Definition at line 67 of file wccp2.cc.

◆ WCCP2_SERVICE_DST_IP_ALT_HASH

#define WCCP2_SERVICE_DST_IP_ALT_HASH   0x200

Definition at line 163 of file wccp2.cc.

◆ WCCP2_SERVICE_DST_IP_HASH

#define WCCP2_SERVICE_DST_IP_HASH   0x2

Definition at line 157 of file wccp2.cc.

◆ WCCP2_SERVICE_DST_PORT_ALT_HASH

#define WCCP2_SERVICE_DST_PORT_ALT_HASH   0x800

Definition at line 165 of file wccp2.cc.

◆ WCCP2_SERVICE_DST_PORT_HASH

#define WCCP2_SERVICE_DST_PORT_HASH   0x8

Definition at line 159 of file wccp2.cc.

◆ WCCP2_SERVICE_DYNAMIC

#define WCCP2_SERVICE_DYNAMIC   1

Definition at line 150 of file wccp2.cc.

◆ WCCP2_SERVICE_ID_HTTP

#define WCCP2_SERVICE_ID_HTTP   0x00

Definition at line 153 of file wccp2.cc.

◆ WCCP2_SERVICE_INFO

#define WCCP2_SERVICE_INFO   1

Definition at line 68 of file wccp2.cc.

◆ WCCP2_SERVICE_PORTS_DEFINED

#define WCCP2_SERVICE_PORTS_DEFINED   0x10

Definition at line 160 of file wccp2.cc.

◆ WCCP2_SERVICE_PORTS_SOURCE

#define WCCP2_SERVICE_PORTS_SOURCE   0x20

Definition at line 161 of file wccp2.cc.

◆ WCCP2_SERVICE_SRC_IP_ALT_HASH

#define WCCP2_SERVICE_SRC_IP_ALT_HASH   0x100

Definition at line 162 of file wccp2.cc.

◆ WCCP2_SERVICE_SRC_IP_HASH

#define WCCP2_SERVICE_SRC_IP_HASH   0x1

Definition at line 156 of file wccp2.cc.

◆ WCCP2_SERVICE_SRC_PORT_ALT_HASH

#define WCCP2_SERVICE_SRC_PORT_ALT_HASH   0x400

Definition at line 164 of file wccp2.cc.

◆ WCCP2_SERVICE_SRC_PORT_HASH

#define WCCP2_SERVICE_SRC_PORT_HASH   0x4

Definition at line 158 of file wccp2.cc.

◆ WCCP2_SERVICE_STANDARD

#define WCCP2_SERVICE_STANDARD   0

Definition at line 149 of file wccp2.cc.

◆ WCCP2_VERSION

#define WCCP2_VERSION   0x200

Definition at line 86 of file wccp2.cc.

◆ WCCP2_WC_ID_INFO

#define WCCP2_WC_ID_INFO   3

Definition at line 70 of file wccp2.cc.

◆ WCCP2_WC_VIEW_INFO

#define WCCP2_WC_VIEW_INFO   5

Definition at line 72 of file wccp2.cc.

◆ WCCP_BUCKETS

#define WCCP_BUCKETS   256

Definition at line 34 of file wccp2.cc.

◆ WCCP_PORT

#define WCCP_PORT   2048

Definition at line 32 of file wccp2.cc.

◆ WCCP_RESPONSE_SIZE

#define WCCP_RESPONSE_SIZE   12448

Definition at line 33 of file wccp2.cc.

Function Documentation

◆ check_null_wccp2_service()

int check_null_wccp2_service ( void *  v)

Definition at line 2227 of file wccp2.cc.

References wccp2_service_list_head.

◆ CheckFieldDataLength()

template<class FieldHeader >
static size_t CheckFieldDataLength ( const FieldHeader *  header,
const size_t  dataLength,
const void *  areaStart,
const size_t  areaSize,
const char *  error 
)
static

Checks that the area contains at least dataLength bytes after the header. The size of the field header itself is not included in dataLength.

Returns
the total field size – the field header and field data combined

Definition at line 1142 of file wccp2.cc.

References assert, CheckSectionLength(), and error().

Referenced by wccp2HandleUdp().

◆ CheckSectionLength()

static void CheckSectionLength ( const void *  sectionStart,
const size_t  sectionLength,
const void *  wholeStart,
const size_t  wholeSize,
const char *  error 
)
static

Checks that the given area section ends inside the given (whole) area.

Parameters
errorthe message to throw when the section does not fit

Definition at line 1115 of file wccp2.cc.

References assert, error(), and Here.

Referenced by CheckFieldDataLength(), SetField(), and wccp2HandleUdp().

◆ dump_wccp2_amethod()

void dump_wccp2_amethod ( StoreEntry e,
const char *  label,
int  v 
)

◆ dump_wccp2_method()

void dump_wccp2_method ( StoreEntry e,
const char *  label,
int  v 
)

◆ dump_wccp2_service()

◆ dump_wccp2_service_info()

◆ free_wccp2_amethod()

void free_wccp2_amethod ( int v)

Definition at line 2138 of file wccp2.cc.

◆ free_wccp2_method()

void free_wccp2_method ( int v)

Definition at line 2090 of file wccp2.cc.

◆ free_wccp2_service()

void free_wccp2_service ( void *  v)

Definition at line 2223 of file wccp2.cc.

◆ free_wccp2_service_info()

void free_wccp2_service_info ( void *  v)

Definition at line 2577 of file wccp2.cc.

◆ parse_wccp2_amethod()

void parse_wccp2_amethod ( int method)

Parse wccp2_assignment_method option they can be '1' aka 'hash' or '2' aka 'mask' representing the integer numeric of the same.

Definition at line 2099 of file wccp2.cc.

References DBG_CRITICAL, debugs, ConfigParser::NextToken(), self_destruct(), WCCP2_ASSIGNMENT_METHOD_HASH, and WCCP2_ASSIGNMENT_METHOD_MASK.

◆ parse_wccp2_method()

void parse_wccp2_method ( int method)

Parse wccp2_return_method and wccp2_forwarding_method options they can be '1' aka 'gre' or '2' aka 'l2' representing the integer numeric of the same.

Definition at line 2051 of file wccp2.cc.

References DBG_CRITICAL, debugs, ConfigParser::NextToken(), self_destruct(), WCCP2_METHOD_GRE, and WCCP2_METHOD_L2.

◆ parse_wccp2_service()

◆ parse_wccp2_service_flags()

◆ parse_wccp2_service_info()

◆ parse_wccp2_service_ports()

static void parse_wccp2_service_ports ( char *  options,
int  portlist[] 
)
static

Definition at line 2292 of file wccp2.cc.

References fatalf(), WCCP2_NUMPORTS, and xatoi().

Referenced by parse_wccp2_service_info().

◆ SetField()

template<class Field >
static void SetField ( Field *&  field,
const void *  fieldStart,
const void *  areaStart,
const size_t  areaSize,
const char *  error 
)
static

Positions the given field at a given start within a given packet area. The Field type determines the correct field size (used for bounds checking).

Parameters
fieldthe field pointer the function should set
areaStartthe start of a packet (sub)structure containing the field
areaSizethe size of the packet (sub)structure starting at areaStart
fieldStartthe start of a field within the given area
errorthe message to throw when the field does not fit the area

Definition at line 1159 of file wccp2.cc.

References CheckSectionLength(), and error().

Referenced by wccp2HandleUdp().

◆ wccp2_add_service_list()

void wccp2_add_service_list ( int  service,
int  service_id,
int  service_priority,
int  service_proto,
int  service_flags,
int  ports[],
int  security_type,
char *  password 
)
static

◆ wccp2_check_security()

◆ wccp2_get_service_by_id()

static struct wccp2_service_list_t * wccp2_get_service_by_id ( int  service,
int  service_id 
)
static

◆ wccp2_update_md5_security()

◆ wccp2_update_service()

◆ wccp2AssignBuckets()

static void wccp2AssignBuckets ( void *  )
static

Definition at line 1658 of file wccp2.cc.

References assert, SquidConfig::assignment_method, buckets, wccp2_value_element_t::cache_ip, wccp2_cache_list_t::cache_ip, wccp2_router_list_t::cache_list_head, wccp2_service_list_t::change_num, wccp2_router_assign_element_t::change_number, comm_udp_sendto(), Config, debugs, wccp2_mask_element_t::dest_ip_mask, wccp2_value_element_t::dest_ip_value, wccp2_mask_element_t::dest_port_mask, wccp2_value_element_t::dest_port_value, fatalf(), wccp2_router_list_t::info, wccp2_service_list_t::info, int, wccp2_item_header_t::length, wccp2_message_header_t::length, wccp2_router_list_t::local_ip, wccp2_service_list_t::lowest_ip, assignment_key_t::master_ip, assignment_key_t::master_number, wccp2_router_list_t::member_change, wccp2_cache_list_t::next, wccp2_router_list_t::next, wccp2_service_list_t::next, wccp2_router_list_t::num_caches, wccp2_service_list_t::num_routers, wccp2_mask_element_t::number_values, wccp2_router_id_element_t::received_id, wccp2_router_assign_element_t::received_id, wccp2_router_id_element_t::router_address, wccp2_router_assign_element_t::router_address, wccp2_service_list_t::router_list_head, wccp2_router_list_t::router_sendto_address, safe_free, wccp2_service_list_t::security_info, wccp2_service_info_t::service, wccp2_service_info_t::service_flags, wccp2_service_list_t::service_info, wccp2_mask_element_t::source_ip_mask, wccp2_value_element_t::source_ip_value, wccp2_mask_element_t::source_port_mask, wccp2_value_element_t::source_port_value, theWccp2Connection, wccp2_item_header_t::type, wccp2_message_header_t::type, wccp2_message_header_t::version, SquidConfig::Wccp2, WCCP2_ALT_ASSIGNMENT, WCCP2_ASSIGNMENT_METHOD_HASH, WCCP2_ASSIGNMENT_METHOD_MASK, WCCP2_MASK_ASSIGNMENT, WCCP2_MD5_SECURITY, WCCP2_NO_SECURITY, wccp2_numrouters, WCCP2_REDIRECT_ASSIGN, WCCP2_REDIRECT_ASSIGNMENT, wccp2_service_list_t::wccp2_security_type, WCCP2_SERVICE_DST_IP_ALT_HASH, WCCP2_SERVICE_DST_IP_HASH, WCCP2_SERVICE_DST_PORT_ALT_HASH, WCCP2_SERVICE_DST_PORT_HASH, wccp2_service_list_head, WCCP2_SERVICE_SRC_IP_ALT_HASH, WCCP2_SERVICE_SRC_IP_HASH, WCCP2_SERVICE_SRC_PORT_ALT_HASH, WCCP2_SERVICE_SRC_PORT_HASH, WCCP2_SERVICE_STANDARD, wccp2_update_md5_security(), WCCP2_VERSION, WCCP_BUCKETS, wccp2_service_list_t::wccp_password, WCCP_PORT, WCCP_RESPONSE_SIZE, wccp2_cache_list_t::weight, xcalloc(), and xstrerr().

◆ wccp2ConnectionClose()

◆ wccp2ConnectionOpen()

◆ wccp2HandleUdp()

static void wccp2HandleUdp ( int  sock,
void *   
)
static

Definition at line 1169 of file wccp2.cc.

References wccp2_cache_identity_info_t::addr, wccp2_cache_mask_identity_info_t::addr, cache_mask_info_t::addr, assert, SquidConfig::assignment_method, wccp2_cache_list_t::cache_ip, wccp2_router_list_t::cache_list_head, wccp2_capability_info_header_t::capability_info_length, wccp2_capability_element_t::capability_length, wccp2_capability_element_t::capability_type, wccp2_capability_element_t::capability_value, router_view_t::change_number, CheckFieldDataLength(), CheckSectionLength(), COMM_SELECT_READ, comm_udp_recvfrom(), Config, CurrentException(), wccp2_i_see_you_t::data, DBG_IMPORTANT, debugs, eventAdd(), eventDelete(), fatalf(), SquidConfig::forwarding_method, Ip::Address::getSockAddr(), router_view_t::header, Here, wccp2_router_list_t::info, int, wccp2_i_see_you_t::length, wccp2_router_list_t::local_ip, wccp2_service_list_t::lowest_ip, wccp2_router_list_t::member_change, Must3, wccp2_cache_list_t::next, wccp2_router_list_t::next, wccp2_service_list_t::next, cache_mask_info_t::num1, wccp2_router_list_t::num_caches, wccp2_router_id_element_t::received_id, SquidConfig::return_method, wccp2_router_id_element_t::router_address, router_identity_info_t::router_id_element, wccp2_service_list_t::router_list_head, wccp2_router_list_t::router_sendto_address, wccp2_service_list_t::security_info, wccp2_security_none_t::security_option, wccp2_security_md5_t::security_option, wccp2_service_info_t::service_id, wccp2_service_list_t::service_info, SetField(), Ip::Address::setIPv4(), Comm::SetSelect(), wccp2_i_see_you_t::type, wccp2_i_see_you_t::version, SquidConfig::Wccp2, WCCP2_ASSIGN_MAP, WCCP2_ASSIGNMENT_METHOD_HASH, WCCP2_ASSIGNMENT_METHOD_MASK, WCCP2_CAPABILITY_ASSIGNMENT_METHOD, WCCP2_CAPABILITY_FORWARDING_METHOD, WCCP2_CAPABILITY_INFO, WCCP2_CAPABILITY_RETURN_METHOD, wccp2_check_security(), WCCP2_FORWARDING_METHOD_GRE, WCCP2_I_SEE_YOU, wccp2_i_see_you, WCCP2_PACKET_RETURN_METHOD_GRE, WCCP2_REDIRECT_ASSIGNMENT, WCCP2_ROUTER_ID_INFO, WCCP2_RTR_VIEW_INFO, WCCP2_SECURITY_INFO, WCCP2_SERVICE_INFO, wccp2_service_list_head, WCCP2_VERSION, wccp2AssignBuckets, wccp2ConnectionClose(), wccp2HandleUdp, wccp2SortCacheList(), WCCP_RESPONSE_SIZE, wccp2_cache_identity_info_t::weight, wccp2_cache_list_t::weight, xcalloc(), and xfree.

◆ wccp2HereIam()

◆ wccp2Init()

void wccp2Init ( void  )

Definition at line 656 of file wccp2.cc.

References wccp2_cache_identity_info_t::addr, wccp2_cache_mask_identity_info_t::addr, assert, SquidConfig::assignment_method, wccp2_cache_identity_info_t::bits, wccp2_cache_mask_identity_info_t::bits, wccp2_cache_identity_info_t::buckets, wccp2_identity_info_t::cache_identity, wccp2_mask_identity_info_t::cache_identity, wccp2_identity_info_t::cache_identity_length, wccp2_mask_identity_info_t::cache_identity_length, wccp2_identity_info_t::cache_identity_type, wccp2_mask_identity_info_t::cache_identity_type, wccp2_cache_view_header_t::cache_view_length, wccp2_cache_view_header_t::cache_view_type, wccp2_cache_view_header_t::cache_view_version, wccp2_capability_info_header_t::capability_info_length, wccp2_capability_info_header_t::capability_info_type, wccp2_capability_element_t::capability_length, wccp2_capability_element_t::capability_type, wccp2_capability_element_t::capability_value, Config, debugs, wccp2_mask_element_t::dest_ip_mask, wccp2_mask_element_t::dest_port_mask, eventAdd(), eventFind(), fatalf(), SquidConfig::forwarding_method, Ip::Address::getInAddr(), wccp2_cache_identity_info_t::hash_revision, wccp2_router_list_t::info, wccp2_service_list_t::info, Ip::Address::isAnyAddr(), wccp2_message_header_t::length, wccp2_cache_mask_identity_info_t::mask, wccp2_cache_mask_identity_info_t::mask_element_count, wccp2_router_list_t::member_change, Ip::Address_list::next, wccp2_router_list_t::next, wccp2_service_list_t::next, wccp2_cache_view_info_t::num_caches, wccp2_service_list_t::num_routers, wccp2_router_id_element_t::received_id, SquidConfig::return_method, SquidConfig::router, wccp2_router_id_element_t::router_address, wccp2_service_list_t::router_list_head, wccp2_router_list_t::router_sendto_address, Ip::Address_list::s, wccp2_service_list_t::security_info, wccp2_security_md5_t::security_length, wccp2_security_md5_t::security_option, wccp2_security_md5_t::security_type, wccp2_service_info_t::service, wccp2_service_info_t::service_flags, wccp2_service_list_t::service_info, wccp2_mask_element_t::source_ip_mask, wccp2_mask_element_t::source_port_mask, wccp2_cache_identity_info_t::status, wccp2_cache_mask_identity_info_t::status, wccp2_message_header_t::type, wccp2_message_header_t::version, SquidConfig::Wccp2, WCCP2_ASSIGNMENT_METHOD_HASH, WCCP2_ASSIGNMENT_METHOD_MASK, wccp2_cache_view_header, wccp2_cache_view_info, WCCP2_CAPABILITY_ASSIGNMENT_METHOD, wccp2_capability_element, WCCP2_CAPABILITY_FORWARDING_METHOD, WCCP2_CAPABILITY_INFO, wccp2_capability_info_header, WCCP2_CAPABILITY_RETURN_METHOD, wccp2_connected, WCCP2_HERE_I_AM, wccp2_here_i_am_header, wccp2_identity_info, wccp2_service_list_t::wccp2_identity_info_ptr, WCCP2_MASK_ASSIGNMENT_DATA, wccp2_mask_identity_info, WCCP2_MD5_SECURITY, WCCP2_NO_SECURITY, wccp2_numrouters, WCCP2_SECURITY_INFO, wccp2_service_list_t::wccp2_security_type, WCCP2_SERVICE_DST_IP_ALT_HASH, WCCP2_SERVICE_DST_IP_HASH, WCCP2_SERVICE_DST_PORT_ALT_HASH, WCCP2_SERVICE_DST_PORT_HASH, wccp2_service_list_head, WCCP2_SERVICE_SRC_IP_ALT_HASH, WCCP2_SERVICE_SRC_IP_HASH, WCCP2_SERVICE_SRC_PORT_ALT_HASH, WCCP2_SERVICE_SRC_PORT_HASH, WCCP2_SERVICE_STANDARD, WCCP2_VERSION, WCCP2_WC_ID_INFO, WCCP2_WC_VIEW_INFO, wccp2HereIam, wccp2InitServices(), wccp2_service_list_t::wccp_packet, wccp2_service_list_t::wccp_packet_size, WCCP_RESPONSE_SIZE, SquidConfig::weight, wccp2_cache_identity_info_t::weight, wccp2_cache_mask_identity_info_t::weight, and xcalloc().

◆ wccp2InitServices()

static void wccp2InitServices ( void  )
static

Definition at line 477 of file wccp2.cc.

References debugs.

Referenced by wccp2Init().

◆ wccp2SortCacheList()

static void wccp2SortCacheList ( struct wccp2_cache_list_t head)
static

Definition at line 2543 of file wccp2.cc.

References wccp2_cache_list_t::cache_ip, head, and wccp2_cache_list_t::next.

Referenced by wccp2HandleUdp().

Variable Documentation

◆ empty_portlist

int empty_portlist[WCCP2_NUMPORTS] = {0, 0, 0, 0, 0, 0, 0, 0}

Definition at line 461 of file wccp2.cc.

Referenced by parse_wccp2_service().

◆ theWccp2Connection

int theWccp2Connection = -1
static

◆ wccp2_cache_view_header

struct wccp2_cache_view_header_t wccp2_cache_view_header
static

Definition at line 261 of file wccp2.cc.

Referenced by wccp2Init().

◆ wccp2_cache_view_info

struct wccp2_cache_view_info_t wccp2_cache_view_info
static

Definition at line 270 of file wccp2.cc.

Referenced by wccp2Init().

◆ wccp2_capability_element

struct wccp2_capability_element_t wccp2_capability_element
static

Definition at line 302 of file wccp2.cc.

Referenced by wccp2Init().

◆ wccp2_capability_info_header

struct wccp2_capability_info_header_t wccp2_capability_info_header
static

Definition at line 292 of file wccp2.cc.

Referenced by wccp2Init().

◆ wccp2_connected

int wccp2_connected = 0
static

◆ wccp2_here_i_am_header

struct wccp2_message_header_t wccp2_here_i_am_header
static

Definition at line 90 of file wccp2.cc.

Referenced by wccp2Init().

◆ wccp2_i_see_you

struct wccp2_i_see_you_t wccp2_i_see_you
static

Definition at line 348 of file wccp2.cc.

Referenced by wccp2HandleUdp().

◆ wccp2_identity_info

struct wccp2_identity_info_t wccp2_identity_info
static

Definition at line 199 of file wccp2.cc.

Referenced by wccp2Init().

◆ wccp2_mask_identity_info

struct wccp2_mask_identity_info_t wccp2_mask_identity_info
static

Definition at line 247 of file wccp2.cc.

Referenced by wccp2Init().

◆ wccp2_numrouters

int wccp2_numrouters
static

Definition at line 434 of file wccp2.cc.

Referenced by wccp2AssignBuckets(), wccp2ConnectionOpen(), wccp2HereIam(), and wccp2Init().

◆ wccp2_service_list_head

◆ wccp2AssignBuckets

EVH wccp2AssignBuckets
static

Definition at line 41 of file wccp2.cc.

Referenced by wccp2ConnectionClose(), and wccp2HandleUdp().

◆ wccp2HandleUdp

PF wccp2HandleUdp
static

Definition at line 39 of file wccp2.cc.

Referenced by wccp2ConnectionOpen(), and wccp2HandleUdp().

◆ wccp2HereIam

EVH wccp2HereIam
static

Definition at line 40 of file wccp2.cc.

Referenced by wccp2ConnectionClose(), wccp2HereIam(), and wccp2Init().

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors