diff options
| author | Josh Blum <josh@joshknows.com> | 2011-02-09 20:04:31 -0800 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2011-02-09 20:04:31 -0800 | 
| commit | f73f2410ee33648538d5fde92bd018b3e96ed548 (patch) | |
| tree | 1b816c2e72529db4b1a5195b9ffd326089c1b90f | |
| parent | aa73e29d507f1523c17cf625dbd9c68f5a7d3787 (diff) | |
| parent | fa35192bcb89c6f026d76d7f5190e22341840a47 (diff) | |
| download | uhd-f73f2410ee33648538d5fde92bd018b3e96ed548.tar.gz uhd-f73f2410ee33648538d5fde92bd018b3e96ed548.tar.bz2 uhd-f73f2410ee33648538d5fde92bd018b3e96ed548.zip | |
Merge branch 'master' into next
Conflicts:
	host/lib/transport/udp_zero_copy_asio.cpp
| -rw-r--r-- | firmware/zpu/lib/net_common.c | 22 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/mboard_impl.cpp | 8 | 
2 files changed, 23 insertions, 7 deletions
| diff --git a/firmware/zpu/lib/net_common.c b/firmware/zpu/lib/net_common.c index ec9198090..d1b06976d 100644 --- a/firmware/zpu/lib/net_common.c +++ b/firmware/zpu/lib/net_common.c @@ -298,20 +298,28 @@ handle_icmp_packet(struct ip_addr src, struct ip_addr dst,      break;    case ICMP_ECHO:{ +    const void *icmp_data_buff = ((uint8_t*)icmp) + sizeof(struct icmp_echo_hdr); +    size_t icmp_data_len = len - sizeof(struct icmp_echo_hdr); +      struct icmp_echo_hdr echo_reply;      echo_reply.type = 0;      echo_reply.code = 0;      echo_reply.chksum = 0;      echo_reply.id = icmp->id;      echo_reply.seqno = icmp->seqno; -    echo_reply.chksum = ~chksum_buffer( -        (unsigned short *)&echo_reply, -        sizeof(echo_reply)/sizeof(short), -    0); +    echo_reply.chksum = ~chksum_buffer( //data checksum +        (unsigned short *)icmp_data_buff, +        icmp_data_len/sizeof(short), +        chksum_buffer(                  //header checksum +            (unsigned short *)&echo_reply, +            sizeof(echo_reply)/sizeof(short), +        0) +    ); +      send_ip_pkt( -        src, IP_PROTO_ICMP, &echo_reply, sizeof(echo_reply), -        ((uint8_t*)icmp) + sizeof(struct icmp_echo_hdr), -        len - sizeof(struct icmp_echo_hdr) +        src, IP_PROTO_ICMP, +        &echo_reply, sizeof(echo_reply), +        icmp_data_buff, icmp_data_len      );      break;    } diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp index 784f662d9..397fae636 100644 --- a/host/lib/usrp/usrp2/mboard_impl.cpp +++ b/host/lib/usrp/usrp2/mboard_impl.cpp @@ -157,6 +157,14 @@ usrp2_mboard_impl::usrp2_mboard_impl(      //set default subdev specs      (*this)[MBOARD_PROP_RX_SUBDEV_SPEC] = subdev_spec_t();      (*this)[MBOARD_PROP_TX_SUBDEV_SPEC] = subdev_spec_t(); + +    //This is a hack/fix for the lingering packet problem. +    stream_cmd_t stream_cmd(stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE); +    stream_cmd.num_samps = 1; +    this->issue_ddc_stream_cmd(stream_cmd); +    data_transport->get_recv_buff().get(); //recv with timeout for lingering +    data_transport->get_recv_buff().get(); //recv with timeout for expected +    _iface->poke32(_iface->regs.rx_ctrl_clear_overrun, 1); //resets sequence  }  usrp2_mboard_impl::~usrp2_mboard_impl(void){ | 
