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

发布时间:2024年01月15日

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的配置,则这里需要显式地创建。

文章来源:https://blog.csdn.net/jiangwei0512/article/details/135571877
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。