Lines Matching refs:pkt
56 static int igmp_v2_create(struct net_pkt *pkt, const struct in_addr *addr, in igmp_v2_create() argument
64 net_pkt_get_data(pkt, &igmp_access); in igmp_v2_create()
74 if (net_pkt_set_data(pkt, &igmp_access)) { in igmp_v2_create()
78 igmp->chksum = net_calc_chksum_igmp(pkt); in igmp_v2_create()
80 net_pkt_set_overwrite(pkt, true); in igmp_v2_create()
81 net_pkt_cursor_init(pkt); in igmp_v2_create()
83 net_pkt_skip(pkt, offsetof(struct net_ipv4_igmp_v2_report, chksum)); in igmp_v2_create()
84 if (net_pkt_write(pkt, &igmp->chksum, sizeof(igmp->chksum))) { in igmp_v2_create()
92 static int igmp_v3_create(struct net_pkt *pkt, uint8_t type, struct net_if_mcast_addr mcast[], in igmp_v3_create() argument
102 igmp = (struct net_ipv4_igmp_v3_report *)net_pkt_get_data(pkt, &igmp_access); in igmp_v3_create()
132 if (net_pkt_set_data(pkt, &igmp_access)) { in igmp_v3_create()
150 pkt, &group_record_access); in igmp_v3_create()
160 if (net_pkt_set_data(pkt, &group_record_access)) { in igmp_v3_create()
165 if (net_pkt_write(pkt, &mcast[i].sources[j].in_addr.s_addr, in igmp_v3_create()
172 igmp->chksum = net_calc_chksum_igmp(pkt); in igmp_v3_create()
174 net_pkt_set_overwrite(pkt, true); in igmp_v3_create()
175 net_pkt_cursor_init(pkt); in igmp_v3_create()
177 net_pkt_skip(pkt, offsetof(struct net_ipv4_igmp_v3_report, chksum)); in igmp_v3_create()
178 if (net_pkt_write(pkt, &igmp->chksum, sizeof(igmp->chksum))) { in igmp_v3_create()
186 static int igmp_v2_create_packet(struct net_pkt *pkt, const struct in_addr *dst, in igmp_v2_create_packet() argument
193 net_pkt_set_ipv4_ttl(pkt, 1U); in igmp_v2_create_packet()
195 ret = net_ipv4_create_full(pkt, in igmp_v2_create_packet()
197 net_pkt_iface(pkt), in igmp_v2_create_packet()
209 if (net_pkt_write_be32(pkt, router_alert)) { in igmp_v2_create_packet()
213 net_pkt_set_ipv4_opts_len(pkt, IPV4_OPT_HDR_ROUTER_ALERT_LEN); in igmp_v2_create_packet()
215 return igmp_v2_create(pkt, group, type); in igmp_v2_create_packet()
219 static int igmp_v3_create_packet(struct net_pkt *pkt, const struct in_addr *dst, in igmp_v3_create_packet() argument
226 net_pkt_set_ipv4_ttl(pkt, 1U); in igmp_v3_create_packet()
228 ret = net_ipv4_create_full(pkt, net_if_ipv4_select_src_addr(net_pkt_iface(pkt), dst), dst, in igmp_v3_create_packet()
235 if (net_pkt_write_be32(pkt, router_alert)) { in igmp_v3_create_packet()
239 net_pkt_set_ipv4_opts_len(pkt, IPV4_OPT_HDR_ROUTER_ALERT_LEN); in igmp_v3_create_packet()
241 return igmp_v3_create(pkt, type, mcast, mcast_len); in igmp_v3_create_packet()
245 static int igmp_send(struct net_pkt *pkt) in igmp_send() argument
249 net_pkt_cursor_init(pkt); in igmp_send()
250 net_ipv4_finalize(pkt, IPPROTO_IGMP); in igmp_send()
252 ret = net_send_data(pkt); in igmp_send()
254 net_stats_update_ipv4_igmp_drop(net_pkt_iface(pkt)); in igmp_send()
258 net_stats_update_ipv4_igmp_sent(net_pkt_iface(pkt)); in igmp_send()
267 struct net_pkt *pkt = NULL; in send_igmp_report() local
308 pkt = net_pkt_alloc_with_buffer(iface, in send_igmp_report()
313 if (!pkt) { in send_igmp_report()
320 ret = igmp_v2_create_packet(pkt, &ipv4->mcast[i].address.in_addr, in send_igmp_report()
327 ret = igmp_send(pkt); in send_igmp_report()
333 pkt = NULL; in send_igmp_report()
337 if (pkt) { in send_igmp_report()
338 net_pkt_unref(pkt); in send_igmp_report()
348 struct net_pkt *pkt = NULL; in send_igmp_v3_report() local
377 pkt = net_pkt_alloc_with_buffer( in send_igmp_v3_report()
383 if (!pkt) { in send_igmp_v3_report()
391 ret = igmp_v3_create_packet(pkt, &igmp_multicast_addr, ipv4->mcast, NET_IF_MAX_IPV4_MADDR, in send_igmp_v3_report()
397 ret = igmp_send(pkt); in send_igmp_v3_report()
403 pkt = NULL; in send_igmp_v3_report()
406 if (pkt) { in send_igmp_v3_report()
407 net_pkt_unref(pkt); in send_igmp_v3_report()
414 enum net_verdict net_ipv4_igmp_input(struct net_pkt *pkt, struct net_ipv4_hdr *ip_hdr) argument
421 pkt->buffer->len - (net_pkt_ip_hdr_len(pkt) + net_pkt_ipv4_opts_len(pkt));
450 igmpv3_hdr = (struct net_ipv4_igmp_v3_query *)net_pkt_get_data(pkt, &igmpv3_access);
457 igmpv2_hdr = (struct net_ipv4_igmp_v2_query *)net_pkt_get_data(pkt, &igmpv2_access);
466 ret = net_calc_chksum_igmp(pkt);
474 net_pkt_acknowledge_data(pkt, &igmpv3_access);
477 net_pkt_acknowledge_data(pkt, &igmpv2_access);
484 net_stats_update_ipv4_igmp_recv(net_pkt_iface(pkt));
488 (void)send_igmp_v3_report(net_pkt_iface(pkt), igmpv3_hdr);
491 (void)send_igmp_report(net_pkt_iface(pkt), igmpv2_hdr);
496 net_pkt_unref(pkt);
501 net_stats_update_ipv4_igmp_drop(net_pkt_iface(pkt));
511 struct net_pkt *pkt; local
514 pkt = net_pkt_alloc_with_buffer(iface,
519 if (!pkt) {
527 ret = igmp_v2_create_packet(pkt,
534 ret = igmp_send(pkt);
542 net_pkt_unref(pkt);
551 struct net_pkt *pkt; local
554 pkt = net_pkt_alloc_with_buffer(iface,
560 if (!pkt) {
564 ret = igmp_v3_create_packet(pkt, &igmp_multicast_addr, mcast, 1, NET_IPV4_IGMP_REPORT_V3);
569 ret = igmp_send(pkt);
577 net_pkt_unref(pkt);