1 // SPDX-License-Identifier: GPL-2.0-only
3 * IEEE 802.1Q GARP VLAN Registration Protocol (GVRP)
5 * Copyright (c) 2008 Patrick McHardy <kaber@trash.net>
7 #include <linux/types.h>
8 #include <linux/if_vlan.h>
12 #define GARP_GVRP_ADDRESS { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x21 }
14 enum gvrp_attributes
{
19 #define GVRP_ATTR_MAX (__GVRP_ATTR_MAX - 1)
21 static struct garp_application vlan_gvrp_app __read_mostly
= {
22 .proto
.group_address
= GARP_GVRP_ADDRESS
,
23 .maxattr
= GVRP_ATTR_MAX
,
24 .type
= GARP_APPLICATION_GVRP
,
27 int vlan_gvrp_request_join(const struct net_device
*dev
)
29 const struct vlan_dev_priv
*vlan
= vlan_dev_priv(dev
);
30 __be16 vlan_id
= htons(vlan
->vlan_id
);
32 if (vlan
->vlan_proto
!= htons(ETH_P_8021Q
))
34 return garp_request_join(vlan
->real_dev
, &vlan_gvrp_app
,
35 &vlan_id
, sizeof(vlan_id
), GVRP_ATTR_VID
);
38 void vlan_gvrp_request_leave(const struct net_device
*dev
)
40 const struct vlan_dev_priv
*vlan
= vlan_dev_priv(dev
);
41 __be16 vlan_id
= htons(vlan
->vlan_id
);
43 if (vlan
->vlan_proto
!= htons(ETH_P_8021Q
))
45 garp_request_leave(vlan
->real_dev
, &vlan_gvrp_app
,
46 &vlan_id
, sizeof(vlan_id
), GVRP_ATTR_VID
);
49 int vlan_gvrp_init_applicant(struct net_device
*dev
)
51 return garp_init_applicant(dev
, &vlan_gvrp_app
);
54 void vlan_gvrp_uninit_applicant(struct net_device
*dev
)
56 garp_uninit_applicant(dev
, &vlan_gvrp_app
);
59 int __init
vlan_gvrp_init(void)
61 return garp_register_application(&vlan_gvrp_app
);
64 void vlan_gvrp_uninit(void)
66 garp_unregister_application(&vlan_gvrp_app
);