- if (code == ICMP_REDIRECT_NET || code == ICMP_REDIRECT_TOSNET) {
- u_long in_netof();
- icmpsrc.sin_addr =
- in_makeaddr(in_netof(icp->icmp_ip.ip_dst), INADDR_ANY);
- in_sockmaskof(icp->icmp_ip.ip_dst, &icmpmask);
- rtredirect((struct sockaddr *)&icmpsrc,
- (struct sockaddr *)&icmpdst,
- (struct sockaddr *)&icmpmask, RTF_GATEWAY,
- (struct sockaddr *)&icmpgw, (struct rtentry **)0);
- icmpsrc.sin_addr = icp->icmp_ip.ip_dst;
- pfctlinput(PRC_REDIRECT_NET,
- (struct sockaddr *)&icmpsrc);
- } else {
- icmpsrc.sin_addr = icp->icmp_ip.ip_dst;
- rtredirect((struct sockaddr *)&icmpsrc,
- (struct sockaddr *)&icmpdst,
- (struct sockaddr *)0, RTF_GATEWAY | RTF_HOST,
- (struct sockaddr *)&icmpgw, (struct rtentry **)0);
- pfctlinput(PRC_REDIRECT_HOST,
- (struct sockaddr *)&icmpsrc);
- }
+ icmpsrc.sin_addr = icp->icmp_ip.ip_dst;
+ rtredirect((struct sockaddr *)&icmpsrc,
+ (struct sockaddr *)&icmpdst,
+ (struct sockaddr *)0, RTF_GATEWAY | RTF_HOST,
+ (struct sockaddr *)&icmpgw, (struct rtentry **)0);
+ pfctlinput(PRC_REDIRECT_HOST, (struct sockaddr *)&icmpsrc);