diff --git a/tests/net/mld/src/main.c b/tests/net/mld/src/main.c index 33344a20771..ba83445da87 100644 --- a/tests/net/mld/src/main.c +++ b/tests/net/mld/src/main.c @@ -110,7 +110,7 @@ static int tester_send(struct device *dev, struct net_pkt *pkt) { struct net_icmp_hdr *icmp; - if (!pkt->frags) { + if (!pkt->buffer) { TC_ERROR("No data to send!\n"); return -ENODATA; } @@ -320,60 +320,50 @@ static void send_query(struct net_if *iface) { struct net_pkt *pkt; struct in6_addr dst; - u16_t pos; /* Sent to all MLDv2-capable routers */ net_ipv6_addr_create(&dst, 0xff02, 0, 0, 0, 0, 0, 0, 0x0016); - pkt = net_pkt_get_reserve_tx(K_FOREVER); + /* router alert opt + icmpv6 reserved space + mldv2 mcast record */ + pkt = net_pkt_alloc_with_buffer(iface, 144, AF_INET6, + IPPROTO_ICMPV6, K_FOREVER); - pkt = net_ipv6_create(pkt, - &peer_addr, - &dst, - iface, - NET_IPV6_NEXTHDR_HBHO); - - NET_IPV6_HDR(pkt)->hop_limit = 1; /* RFC 3810 ch 7.4 */ + net_pkt_set_ipv6_hop_limit(pkt, 1); /* RFC 3810 ch 7.4 */ + net_ipv6_create_new(pkt, &peer_addr, &dst); /* Add hop-by-hop option and router alert option, RFC 3810 ch 5. */ - net_pkt_append_u8(pkt, IPPROTO_ICMPV6); - net_pkt_append_u8(pkt, 0); /* length (0 means 8 bytes) */ + net_pkt_write_u8_new(pkt, IPPROTO_ICMPV6); + net_pkt_write_u8_new(pkt, 0); /* length (0 means 8 bytes) */ #define ROUTER_ALERT_LEN 8 /* IPv6 router alert option is described in RFC 2711. */ - net_pkt_append_be16(pkt, 0x0502); /* RFC 2711 ch 2.1 */ - net_pkt_append_be16(pkt, 0); /* pkt contains MLD msg */ + net_pkt_write_be16_new(pkt, 0x0502); /* RFC 2711 ch 2.1 */ + net_pkt_write_be16_new(pkt, 0); /* pkt contains MLD msg */ - net_pkt_append_u8(pkt, 1); /* padn */ - net_pkt_append_u8(pkt, 0); /* padn len */ - - /* ICMPv6 header */ - net_pkt_append_u8(pkt, NET_ICMPV6_MLD_QUERY); /* type */ - net_pkt_append_u8(pkt, 0); /* code */ - net_pkt_append_be16(pkt, 0); /* chksum */ - - net_pkt_append_be16(pkt, 3); /* maximum response code */ - net_pkt_append_be16(pkt, 0); /* reserved field */ - - net_pkt_append_all(pkt, sizeof(struct in6_addr), - (const u8_t *)net_ipv6_unspecified_address(), - K_FOREVER); /* multicast address */ - - net_pkt_append_be16(pkt, 0); /* Resv, S, QRV and QQIC */ - net_pkt_append_be16(pkt, 0); /* number of addresses */ + net_pkt_write_u8_new(pkt, 1); /* padn */ + net_pkt_write_u8_new(pkt, 0); /* padn len */ net_pkt_set_ipv6_ext_len(pkt, ROUTER_ALERT_LEN); + /* ICMPv6 header */ + net_icmpv6_create(pkt, NET_ICMPV6_MLD_QUERY, 0); + + net_pkt_write_be16_new(pkt, 3); /* maximum response code */ + net_pkt_write_be16_new(pkt, 0); /* reserved field */ + + net_pkt_set_ipv6_next_hdr(pkt, NET_IPV6_NEXTHDR_HBHO); + + net_pkt_write_be16_new(pkt, 0); /* Resv, S, QRV and QQIC */ + net_pkt_write_be16_new(pkt, 0); /* number of addresses */ + + net_pkt_write_new(pkt, net_ipv6_unspecified_address(), + sizeof(struct in6_addr)); + net_pkt_cursor_init(pkt); - net_ipv6_finalize(pkt, NET_IPV6_NEXTHDR_HBHO); - - net_pkt_set_iface(pkt, iface); - - net_pkt_write_be16(pkt, pkt->frags, - NET_IPV6H_LEN + ROUTER_ALERT_LEN + 2, - &pos, ntohs(net_calc_chksum_icmpv6(pkt))); + net_ipv6_finalize(pkt, IPPROTO_ICMPV6); + net_pkt_cursor_init(pkt); net_recv_data(iface, pkt); } @@ -384,6 +374,8 @@ static enum net_verdict handle_mld_query(struct net_pkt *pkt, { is_query_received = true; + NET_DBG("Handling MLD query"); + return NET_DROP; } @@ -412,15 +404,12 @@ static void catch_query(void) } is_query_received = false; + + net_icmpv6_unregister_handler(&mld_query_input_handler); } static void verify_send_report(void) { - /* We need to remove our temporary handler so that the - * stack handler is called instead. - */ - net_icmpv6_unregister_handler(&mld_query_input_handler); - is_query_received = false; is_report_sent = false;