- is_ip_valid =
- (!(ip4_address_compare
- (&ip4_hdr->src_address, &tc->connection.rmt_ip.ip4)
- && ip4_address_compare (&ip4_hdr->dst_address,
- &tc->connection.lcl_ip.ip4)));
+
+ val_l = !ip4_address_compare (&ip4_hdr->dst_address,
+ &tc->connection.lcl_ip.ip4);
+ val_l = val_l || ip_is_zero (&tc->connection.lcl_ip, 1);
+ val_r = !ip4_address_compare (&ip4_hdr->src_address,
+ &tc->connection.rmt_ip.ip4);
+ val_r = val_r || tc->state == TCP_STATE_LISTEN;
+ is_ip_valid = val_l && val_r;