Revision 460fec67 slirp/ip_icmp.c

b/slirp/ip_icmp.c
69 69
  register struct icmp *icp;
70 70
  register struct ip *ip=mtod(m, struct ip *);
71 71
  int icmplen=ip->ip_len;
72
  Slirp *slirp = m->slirp;
72 73

  
73 74
  DEBUG_CALL("icmp_input");
74 75
  DEBUG_ARG("m = %lx", (long )m);
......
98 99
  case ICMP_ECHO:
99 100
    icp->icmp_type = ICMP_ECHOREPLY;
100 101
    ip->ip_len += hlen;	             /* since ip_input subtracts this */
101
    if (ip->ip_dst.s_addr == vhost_addr.s_addr) {
102
    if (ip->ip_dst.s_addr == slirp->vhost_addr.s_addr) {
102 103
      icmp_reflect(m);
103 104
    } else {
104 105
      struct socket *so;
105 106
      struct sockaddr_in addr;
106
      if ((so = socreate()) == NULL) goto freeit;
107
      if ((so = socreate(slirp)) == NULL) goto freeit;
107 108
      if(udp_attach(so) == -1) {
108 109
	DEBUG_MISC((dfd,"icmp_input udp_attach errno = %d-%s\n",
109 110
		    errno,strerror(errno)));
......
122 123

  
123 124
      /* Send the packet */
124 125
      addr.sin_family = AF_INET;
125
      if ((so->so_faddr.s_addr & vnetwork_mask.s_addr) ==
126
          vnetwork_addr.s_addr) {
126
      if ((so->so_faddr.s_addr & slirp->vnetwork_mask.s_addr) ==
127
          slirp->vnetwork_addr.s_addr) {
127 128
	/* It's an alias */
128
	if (so->so_faddr.s_addr == vnameserver_addr.s_addr) {
129
	if (so->so_faddr.s_addr == slirp->vnameserver_addr.s_addr) {
129 130
	  addr.sin_addr = dns_addr;
130 131
	} else {
131 132
	  addr.sin_addr = loopback_addr;
......
222 223
  }
223 224

  
224 225
  /* make a copy */
225
  if(!(m=m_get())) goto end_error;               /* get mbuf */
226
  m = m_get(msrc->slirp);
227
  if (!m) {
228
      goto end_error;
229
  }
230

  
226 231
  { int new_m_size;
227 232
    new_m_size=sizeof(struct ip )+ICMP_MINLEN+msrc->m_len+ICMP_MAXDATALEN;
228 233
    if(new_m_size>m->m_size) m_inc(m, new_m_size);
......
285 290
  ip->ip_ttl = MAXTTL;
286 291
  ip->ip_p = IPPROTO_ICMP;
287 292
  ip->ip_dst = ip->ip_src;    /* ip adresses */
288
  ip->ip_src = vhost_addr;
293
  ip->ip_src = m->slirp->vhost_addr;
289 294

  
290 295
  (void ) ip_output((struct socket *)NULL, m);
291 296

  

Also available in: Unified diff