diff options
author | Josh Blum <josh@joshknows.com> | 2010-03-02 14:48:11 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-03-02 14:48:11 -0800 |
commit | 13bd67b4949a91df5e6696e708c935266b14c502 (patch) | |
tree | 40c9ebfd46636307c4537980b7ee116556e7ca17 /firmware/microblaze/lib | |
parent | 451067295399e357d73c9bfdeef5f2ad040e0243 (diff) | |
download | uhd-13bd67b4949a91df5e6696e708c935266b14c502.tar.gz uhd-13bd67b4949a91df5e6696e708c935266b14c502.tar.bz2 uhd-13bd67b4949a91df5e6696e708c935266b14c502.zip |
The net common is too slow in usrp2 firmware to figure out if its vrt data.
Added a custom function to tell if a packet is vrt data, seems to be feeding fast enough at this rate...
Fixed some buffer size calculation logic.
Diffstat (limited to 'firmware/microblaze/lib')
-rw-r--r-- | firmware/microblaze/lib/net_common.c | 11 | ||||
-rw-r--r-- | firmware/microblaze/lib/net_common.h | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/firmware/microblaze/lib/net_common.c b/firmware/microblaze/lib/net_common.c index 693502d18..ab7aadca9 100644 --- a/firmware/microblaze/lib/net_common.c +++ b/firmware/microblaze/lib/net_common.c @@ -378,6 +378,17 @@ handle_arp_packet(struct arp_eth_ipv4 *p, size_t size) } } +bool is_udp_packet_with_vrt(uint32_t *p, size_t nlines, int port){ + struct ip_hdr *ip = (struct ip_hdr *)(p + 4); + struct udp_hdr *udp = (struct udp_hdr *)(((char *)ip) + IP_HLEN); + uint32_t *payload = (uint32_t *)(((char *)udp) + UDP_HLEN); + return \ + (p[3] & 0xffff) == ETHERTYPE_IPV4 && + IPH_PROTO(ip) == IP_PROTO_UDP && + udp->dest == port && + payload[0] != 0; //must be non zero vrt header +} + void handle_eth_packet(uint32_t *p, size_t nlines) { diff --git a/firmware/microblaze/lib/net_common.h b/firmware/microblaze/lib/net_common.h index cfba43412..1a7052f71 100644 --- a/firmware/microblaze/lib/net_common.h +++ b/firmware/microblaze/lib/net_common.h @@ -56,5 +56,6 @@ void send_udp_pkt(int src_port, struct socket_address dst, void handle_eth_packet(uint32_t *p, size_t nlines); +bool is_udp_packet_with_vrt(uint32_t *p, size_t nlines, int port); #endif /* INCLUDED_NET_COMMON_H */ |