Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/8021q/vlan_gvrp.c
15112 views
1
/*
2
* IEEE 802.1Q GARP VLAN Registration Protocol (GVRP)
3
*
4
* Copyright (c) 2008 Patrick McHardy <[email protected]>
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* version 2 as published by the Free Software Foundation.
9
*/
10
#include <linux/types.h>
11
#include <linux/if_vlan.h>
12
#include <net/garp.h>
13
#include "vlan.h"
14
15
#define GARP_GVRP_ADDRESS { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x21 }
16
17
enum gvrp_attributes {
18
GVRP_ATTR_INVALID,
19
GVRP_ATTR_VID,
20
__GVRP_ATTR_MAX
21
};
22
#define GVRP_ATTR_MAX (__GVRP_ATTR_MAX - 1)
23
24
static struct garp_application vlan_gvrp_app __read_mostly = {
25
.proto.group_address = GARP_GVRP_ADDRESS,
26
.maxattr = GVRP_ATTR_MAX,
27
.type = GARP_APPLICATION_GVRP,
28
};
29
30
int vlan_gvrp_request_join(const struct net_device *dev)
31
{
32
const struct vlan_dev_info *vlan = vlan_dev_info(dev);
33
__be16 vlan_id = htons(vlan->vlan_id);
34
35
return garp_request_join(vlan->real_dev, &vlan_gvrp_app,
36
&vlan_id, sizeof(vlan_id), GVRP_ATTR_VID);
37
}
38
39
void vlan_gvrp_request_leave(const struct net_device *dev)
40
{
41
const struct vlan_dev_info *vlan = vlan_dev_info(dev);
42
__be16 vlan_id = htons(vlan->vlan_id);
43
44
garp_request_leave(vlan->real_dev, &vlan_gvrp_app,
45
&vlan_id, sizeof(vlan_id), GVRP_ATTR_VID);
46
}
47
48
int vlan_gvrp_init_applicant(struct net_device *dev)
49
{
50
return garp_init_applicant(dev, &vlan_gvrp_app);
51
}
52
53
void vlan_gvrp_uninit_applicant(struct net_device *dev)
54
{
55
garp_uninit_applicant(dev, &vlan_gvrp_app);
56
}
57
58
int __init vlan_gvrp_init(void)
59
{
60
return garp_register_application(&vlan_gvrp_app);
61
}
62
63
void vlan_gvrp_uninit(void)
64
{
65
garp_unregister_application(&vlan_gvrp_app);
66
}
67
68