/*
- * $Id: asn.cc,v 1.116 2007/12/14 23:11:45 amosjeffries Exp $
+ * $Id: asn.cc,v 1.117 2007/12/20 11:19:48 amosjeffries Exp $
*
* DEBUG: section 53 AS Number handling
* AUTHOR: Duane Wessels, Kostas Anagnostakis
/* BEGIN of definitions for radix tree entries */
-/* AYJ INET6 : Why are these objects being converted to raw u_char memory for use ? */
-
/* 32/128 bits address in memory with length */
-typedef u_char m_ADDR[1 + sizeof(IPAddress)];
-#define store_m_ADDR(i, m) \
- (m[0] = sizeof(IPAddress), xmemcpy(m+1, &i, sizeof(IPAddress)) )
-#define get_m_ADDR(i, m) \
- xmemcpy(&i, m+1, sizeof(IPAddress))
+class m_ADDR {
+public:
+ uint8_t len;
+ IPAddress addr;
+
+ m_ADDR() : len(sizeof(IPAddress)) {};
+};
+
/* END of definitions for radix tree entries */
if (addr.IsAnyAddr())
return 0;
- store_m_ADDR(addr, m_addr);
+ m_addr.addr = addr;
- rn = squid_rn_match(m_addr, AS_tree_head);
+ rn = squid_rn_match(&m_addr, AS_tree_head);
if (rn == NULL) {
debugs(53, 3, "asnMatchIp: Address not in as db.");
memset(e, '\0', sizeof(rtentry_t));
- store_m_ADDR(addr, e->e_addr);
+ e->e_addr.addr = addr;
- store_m_ADDR(mask, e->e_mask);
+ e->e_mask.addr = mask;
- rn = squid_rn_lookup(e->e_addr, e->e_mask, AS_tree_head);
+ rn = squid_rn_lookup(&e->e_addr, &e->e_mask, AS_tree_head);
if (rn != NULL) {
asinfo = ((rtentry_t *) rn)->e_info;
debugs(53, 3, "asnAddNet: Warning: Found a network with multiple AS numbers!");
for (Tail = &asinfo->as_number; *Tail; Tail = &(*Tail)->next)
-
;
q = new List<int> (as_number);
q = new List<int> (as_number);
asinfo = (as_info *)xmalloc(sizeof(as_info));
asinfo->as_number = q;
- rn = squid_rn_addroute(e->e_addr, e->e_mask, AS_tree_head, e->e_nodes);
- rn = squid_rn_match(e->e_addr, AS_tree_head);
+ rn = squid_rn_addroute(&e->e_addr, &e->e_mask, AS_tree_head, e->e_nodes);
+ rn = squid_rn_match(&e->e_addr, AS_tree_head);
assert(rn != NULL);
e->e_info = asinfo;
}
assert(e);
assert(e->e_info);
- (void) get_m_ADDR(addr, e->e_addr);
- (void) get_m_ADDR(mask, e->e_mask);
+ addr = e->e_addr.addr;
+ mask = e->e_mask.addr;
storeAppendPrintf(sentry, "%s/%d\t",
addr.NtoA(buf, MAX_IPSTRLEN),
mask.GetCIDR() );