mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-04-09 08:21:08 -04:00
module-avb: fix MRP NEW messages never being transmitted
AVB_MRP_SEND_NEW was defined as 0, making it indistinguishable from "no pending send" in the MSRP and MVRP event handlers which check `if (!pending_send)`. This meant that when an attribute was first declared (applicant state VN or AN), the NEW message was silently dropped instead of being transmitted on the network. Fix by shifting all AVB_MRP_SEND_* values to start at 1, so that 0 unambiguously means "no send pending". Update the MSRP and MVRP encoders to subtract 1 when encoding to the IEEE 802.1Q wire format (which uses 0-based event values). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
ef8f820d4a
commit
1d0c51f057
4 changed files with 13 additions and 11 deletions
|
|
@ -302,6 +302,8 @@ const char *avb_mrp_notify_name(uint8_t notify)
|
|||
const char *avb_mrp_send_name(uint8_t send)
|
||||
{
|
||||
switch(send) {
|
||||
case 0:
|
||||
return "none";
|
||||
case AVB_MRP_SEND_NEW:
|
||||
return "new";
|
||||
case AVB_MRP_SEND_JOININ:
|
||||
|
|
|
|||
|
|
@ -88,13 +88,13 @@ struct avb_packet_mrp_footer {
|
|||
#define AVB_MRP_ATTRIBUTE_EVENT_LV 5
|
||||
#define AVB_MRP_ATTRIBUTE_EVENT_LVA 6
|
||||
|
||||
#define AVB_MRP_SEND_NEW 0
|
||||
#define AVB_MRP_SEND_JOININ 1
|
||||
#define AVB_MRP_SEND_IN 2
|
||||
#define AVB_MRP_SEND_JOINMT 3
|
||||
#define AVB_MRP_SEND_MT 4
|
||||
#define AVB_MRP_SEND_LV 5
|
||||
#define AVB_MRP_SEND_LVA 6
|
||||
#define AVB_MRP_SEND_NEW 1
|
||||
#define AVB_MRP_SEND_JOININ 2
|
||||
#define AVB_MRP_SEND_IN 3
|
||||
#define AVB_MRP_SEND_JOINMT 4
|
||||
#define AVB_MRP_SEND_MT 5
|
||||
#define AVB_MRP_SEND_LV 6
|
||||
#define AVB_MRP_SEND_LVA 7
|
||||
|
||||
#define AVB_MRP_NOTIFY_NEW 1
|
||||
#define AVB_MRP_NOTIFY_JOIN 2
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ static int encode_talker(struct msrp *msrp, struct attr *a, void *m)
|
|||
*t = a->attr.attr.talker;
|
||||
|
||||
ev = SPA_PTROFF(t, sizeof(*t), uint8_t);
|
||||
*ev = a->attr.mrp->pending_send * 6 * 6;
|
||||
*ev = (a->attr.mrp->pending_send - 1) * 6 * 6;
|
||||
|
||||
f = SPA_PTROFF(ev, sizeof(*ev), struct avb_packet_mrp_footer);
|
||||
f->end_mark = 0;
|
||||
|
|
@ -170,7 +170,7 @@ static int encode_listener(struct msrp *msrp, struct attr *a, void *m)
|
|||
*l = a->attr.attr.listener;
|
||||
|
||||
ev = SPA_PTROFF(l, sizeof(*l), uint8_t);
|
||||
*ev = a->attr.mrp->pending_send * 6 * 6;
|
||||
*ev = (a->attr.mrp->pending_send - 1) * 6 * 6;
|
||||
|
||||
ev = SPA_PTROFF(ev, sizeof(*ev), uint8_t);
|
||||
*ev = a->attr.param * 4 * 4 * 4;
|
||||
|
|
@ -226,7 +226,7 @@ static int encode_domain(struct msrp *msrp, struct attr *a, void *m)
|
|||
*d = a->attr.attr.domain;
|
||||
|
||||
ev = SPA_PTROFF(d, sizeof(*d), uint8_t);
|
||||
*ev = a->attr.mrp->pending_send * 36;
|
||||
*ev = (a->attr.mrp->pending_send - 1) * 36;
|
||||
|
||||
f = SPA_PTROFF(ev, sizeof(*ev), struct avb_packet_mrp_footer);
|
||||
f->end_mark = 0;
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ static int encode_vid(struct mvrp *mvrp, struct attr *a, void *m)
|
|||
*d = a->attr.attr.vid;
|
||||
|
||||
ev = SPA_PTROFF(d, sizeof(*d), uint8_t);
|
||||
*ev = a->attr.mrp->pending_send * 36;
|
||||
*ev = (a->attr.mrp->pending_send - 1) * 36;
|
||||
|
||||
f = SPA_PTROFF(ev, sizeof(*ev), struct avb_packet_mrp_footer);
|
||||
f->end_mark = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue