[squid-users] IPv6 interception crash: Ip::Address::getInAddr : Cannot convert non-IPv4 to IPv4.

Egerváry Gergely gergely at egervary.hu
Tue Oct 4 09:52:45 UTC 2016


> Is there another defined somewhere else? For some reason your Squid is
> managing to build with just "nl_inip" (no 'addr') in the field name.

There's a copy in /usr/include/netinet, but it's the same:

typedef	struct	natlookup {
	i6addr_t	nl_inipaddr;
	i6addr_t	nl_outipaddr;
	i6addr_t	nl_realipaddr;
	int		nl_v;
	int		nl_flags;
	u_short		nl_inport;
	u_short		nl_outport;
	u_short		nl_realport;
} natlookup_t;

#define	nl_inip		nl_inipaddr.in4
#define	nl_outip	nl_outipaddr.in4
#define	nl_realip	nl_realipaddr.in4
#define	nl_inip6	nl_inipaddr.in6
#define	nl_outip6	nl_outipaddr.in6
#define	nl_realip6	nl_realipaddr.in6

... so "nl_inip" is a simple #define to nl_inipaddr.in4

This is from Squid's Intercept.cc:

    natLookup.nl_inport = htons(newConn->local.port());
    newConn->local.getInAddr(natLookup.nl_inip);
    natLookup.nl_outport = htons(newConn->remote.port());
    newConn->remote.getInAddr(natLookup.nl_outip);

Is this correct?
Should we have this in the "else" section of
  if (newConn->remote.isIPv6()) ... instead?

--
Gergely EGERVARY


More information about the squid-users mailing list