【UEFI基础】EDK网络框架(VLAN)

VLAN

VLAN代码综述

MNP中有很多的VLAN介绍,MNP存在的一个重要原因也是为了处理VLAN,而本文介绍的NetworkPkg\VlanConfigDxe\VlanConfigDxe.inf其实只是一个帮助模块,真正的VLAN配置还是在MNP中。

VLAN同样是一个UEFI Driver Model,所以会安装EFI_DRIVER_BINDING_PROTOCOL,其实现如下:

EFI_DRIVER_BINDING_PROTOCOL  gVlanConfigDriverBinding = {
  VlanConfigDriverBindingSupported,
  VlanConfigDriverBindingStart,
  VlanConfigDriverBindingStop,
  0xa,
  NULL,
  NULL
};

所以先介绍它的Supported函数和Start函数。

VlanConfigDriverBindingSupported

VLAN依赖于MNP,所以它的Supported函数中会检测是否安装了配置VLAN的接口,其实现相当简单:

EFI_STATUS
EFIAPI
VlanConfigDriverBindingSupported (
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
  IN EFI_HANDLE                   ControllerHandle,
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL
  )
{
  Status = gBS->OpenProtocol (
                  ControllerHandle,
                  &gEfiVlanConfigProtocolGuid,
                  (VOID **)&VlanConfig,
                  This->DriverBindingHandle,
                  ControllerHandle,
                  EFI_OPEN_PROTOCOL_BY_DRIVER
                  );
}

需要注意gEfiVlanConfigProtocolGuid并不是一定在MNP中安装的,也可以由网卡驱动本身安装。

VlanConfigDriverBindingStart

Start函数中主要完成两件事情:

  1. 创建VLAN结构体:
typedef struct {
  UINTN                             Signature;

  EFI_HII_CONFIG_ACCESS_PROTOCOL    ConfigAccess;
  EFI_HII_HANDLE                    HiiHandle;
  EFI_HANDLE                        DriverHandle;
  EFI_DEVICE_PATH_PROTOCOL          *ChildDevicePath;

  EFI_HANDLE                        ControllerHandle;
  EFI_HANDLE                        ImageHandle;
  EFI_DEVICE_PATH_PROTOCOL          *ParentDevicePath;
  EFI_VLAN_CONFIG_PROTOCOL          *VlanConfig;
  CHAR16                            *MacString;

  UINT16                            NumberOfVlan;
  UINT16                            VlanId[MAX_VLAN_NUMBER];
} VLAN_CONFIG_PRIVATE_DATA;
  1. 安装VLAN配置界面,最终可以在Setup下找到VLAN的配置界面,如下所示:

在这里插入图片描述

由于VLAN模块中的重点其实是UI配置的内容,这里不详细展开。

不过需要注意的一点是如果原本没有VLAN配置(更准确的说法是只有0/0的配置),然后在这里配置了一个VLAN,则原本那个会被删除,只留下一个配置了的VLAN对应的MNP服务,所以如果想要存在ID是0,优先级是0的配置,则这里需要显式地创建。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值