=== modified file 'src/cache_cf.cc' --- src/cache_cf.cc 2013-08-29 09:21:53 +0000 +++ src/cache_cf.cc 2013-08-30 07:57:05 +0000 @@ -1379,9 +1379,9 @@ return; } - if (!strcmp(token,"any_addr")) + if (!strcmp(token,"any_addr") || !strcmp(token,"autoselect")) addr->setAnyAddr(); - else if ( (!strcmp(token,"no_addr")) || (!strcmp(token,"full_mask")) ) + else if ( (!strcmp(token,"no_addr")) || (!strcmp(token,"full_mask")) || (!strcmp(token,"none"))) addr->setNoAddr(); else if ( (*addr = token) ) // try parse numeric/IPA (void) 0; @@ -1408,10 +1408,12 @@ AclAddress *l; for (l = head; l; l = l->next) { - if (!l->addr.isAnyAddr()) + if (l->addr.isAnyAddr()) + storeAppendPrintf(entry, "%s autoselect", name); + else if (l->addr.isNoAddr()) + storeAppendPrintf(entry, "%s none", name); + else storeAppendPrintf(entry, "%s %s", name, l->addr.toStr(buf,MAX_IPSTRLEN)); - else - storeAppendPrintf(entry, "%s autoselect", name); dump_acl_list(entry, l->aclList); === modified file 'src/cf.data.pre' --- src/cf.data.pre 2013-08-29 09:21:53 +0000 +++ src/cf.data.pre 2013-08-30 08:09:48 +0000 @@ -2105,8 +2105,24 @@ Allows you to map requests to different outgoing IP addresses based on the username or source address of the user making the request. - - tcp_outgoing_address ipaddr [[!]aclname] ... + These directives are tested individually for each upstream + destination IP address. + + tcp_outgoing_address ipaddr [[!]aclname] ... + + Special values for IP address: + autoselect Let the operating system decide. + This is the default. + + 0.0.0.0 Let the operating system decide, but only + amongst IPv4 addresses. + + :: Let the operating system decide, but only + amongst IPv6 addresses. + + none Do not use the destination IP being + checked for. + For example; Forwarding clients with dedicated IPs for certain subnets. @@ -2131,11 +2147,6 @@ Requests going to IPv6 websites will use the outgoing 2001:db8:* addresses. - NOTE: The use of this directive using client dependent ACLs is - incompatible with the use of server side persistent connections. To - ensure correct results it is best to set server_persistent_connections - to off when using this directive in such configurations. - NOTE: The use of this directive to set a local IP on outgoing TCP links is incompatible with using TPROXY to set client IP out outbound TCP links. When needing to contact peers use the no-tproxy cache_peer option and the === modified file 'src/peer_select.cc' --- src/peer_select.cc 2013-06-29 04:21:47 +0000 +++ src/peer_select.cc 2013-08-30 15:35:49 +0000 @@ -362,7 +362,8 @@ // check for a configured outgoing address for this destination... getOutgoingAddress(psstate->request, p); - psstate->paths->push_back(p); + if (!p->local.isNoAddr()) + psstate->paths->push_back(p); } } else { debugs(44, 3, HERE << "Unknown host: " << (fs->_peer ? fs->_peer->host : psstate->request->GetHost()));