VPP-Agent MP2 API 汇总

Traffic Rule

UPF 北向 API 定义

typedef mp2_traffic_rule_content {
  u8 flags;
  u8 flow_description[128];
};

autoreply define upf_mp2_ip_traffic_rule {
  u32 client_index;
  u32 context;
  u32 is_add;
  u32 del_all;
  u32 upf_trafficrule_id;
  u8 app_id[32];
  u32 n_pfd_contents;
  vl_api_pfd_content_t mp2_traffic_rule_content[8];
};
  • is_add

    0:删除

    1:添加或更新

  • del_add

    0:删除 upf_trafficrule_id 关联的 rule

    1:删除 app 下所有 trafficrule

  • upf_trafficrule_id:删除时指定的 rule,唯一值,由 vpp-agent 维护其维一性;后期关联 fd 的优先级。

  • app_id:APP Name

  • n_pfd_contents:fd 数量

  • mp2_traffic_rule_content

    flags:1,下发的为 fd

    flow_description:fd 具体值

UPF 所接收结构体

type PfdContent struct {
	Flags           uint32 `binapi:"u32,name=flags" json:"flags,omitempty"`
	FlowDescription []byte `binapi:"u8[128],name=flow_description" json:"flow_description,omitempty"`
	URL             []byte `binapi:"u8[32],name=url" json:"url,omitempty"`
	Domain          []byte `binapi:"u8[16],name=domain" json:"domain,omitempty"`
	Custom          []byte `binapi:"u8[8],name=custom" json:"custom,omitempty"`
}

type UpfMp2IPTrafficRule struct {
	IsAdd                 uint32        `binapi:"u32,name=is_add" json:"is_add,omitempty"`
	DelAll                uint32        `binapi:"u32,name=del_all" json:"del_all,omitempty"`
	UpfTrafficruleID      uint32        `binapi:"u32,name=upf_trafficrule_id" json:"upf_trafficrule_id,omitempty"`
	AppID                 []byte        `binapi:"u8[32],name=app_id" json:"app_id,omitempty"`
	NPfdContents          uint32        `binapi:"u32,name=n_pfd_contents" json:"n_pfd_contents,omitempty"`
	Mp2TrafficRuleContent [8]PfdContent `binapi:"pfd_content[8],name=mp2_traffic_rule_content" json:"mp2_traffic_rule_content,omitempty"`
}

MP2 API 解析成 UPF API

MP2 body 如下:

{
	"trafficRuleId":
	"priority":
	"action":
	"trafficFilter": [
		{
			"ipAddressType":
			"srcAddress":
			"dstAddress":
			"srcPort":
			"dstPort":
			"protocol":
		}
	]
}

VPP-Agent 从 URL 里解析 APP Name 至 AppID 中;解析 action 和 五元组到 FD 中,如 premit/deny,协议转为协议号等。然后发出。

DnsRedirect Rule

UPF 北向 API 定义

manual_print typedef u8 ip4_address[4];

autoreply define upf_mp2_dns_redirect_rule
{
  u32 client_index;
  u32 context;
  u32 is_add;
  u8 app_id[32];
  u32 upf_dnsredirect_rule_id;
  string domain_name[256];
  vl_api_ip4_address_t ip4;
  vl_api_ip6_address_t ip6;
};
  • is_add

    0:删除

    1:添加或更新

  • app_id:APP Name

  • upf_dnsredirect_rule_id:删除时指定的 rule。

  • domain_name:域名

  • ip4:dns server IP

UPF 所接收结构体

type IP4Address [4]uint8

type UpfMp2DNSRedirectRule struct {
	IsAdd                uint32              `binapi:"u32,name=is_add" json:"is_add,omitempty"`
	AppID                []byte              `binapi:"u8[32],name=app_id" json:"app_id,omitempty"`
	UpfDnsredirectRuleID uint32              `binapi:"u32,name=upf_dnsredirect_rule_id" json:"upf_dnsredirect_rule_id,omitempty"`
	DomainName           string              `binapi:"string[256],name=domain_name" json:"domain_name,omitempty"`
	IP4                  ip_types.IP4Address `binapi:"ip4_address,name=ip4" json:"ip4,omitempty"`
	IP6                  ip_types.IP6Address `binapi:"ip6_address,name=ip6" json:"ip6,omitempty"`
}

MP2 API 解析成 UPF API

MP2 body 如下

{
	"dnsRedirectRuleId":
	"domainName":
	"ipAddressType":
	"dnsServerIp":
}

VPP-Agent 从 URL 里解析 APP Name 至 AppID 中;解析 domainName 到 DomainName ,解析 ipAddressType 和 dnsServerIp 到 IP4 或 IP6 中 。然后发出。

Dns Rule

UPF 北向 API 定义

type UpfMp2DNSRule struct {
	IsAdd        uint32              `binapi:"u32,name=is_add" json:"is_add,omitempty"`
	AppID        []byte              `binapi:"u8[32],name=app_id" json:"app_id,omitempty"`
	UpfDnsruleID uint32              `binapi:"u32,name=upf_dnsrule_id" json:"upf_dnsrule_id,omitempty"`
	DomainName   string              `binapi:"string[256],name=domain_name" json:"domain_name,omitempty"`
	IP4          ip_types.IP4Address `binapi:"ip4_address,name=ip4" json:"ip4,omitempty"`
	IP6          ip_types.IP6Address `binapi:"ip6_address,name=ip6" json:"ip6,omitempty"`
	TTL          uint32              `binapi:"u32,name=ttl" json:"ttl,omitempty"`
}
  • is_add

    0:删除

    1:添加或更新

  • app_id:APP Name

  • upf_dnsrule_id:删除时指定的 rule。

  • IP4:dns 解析的 IPv4 地址。

  • TTL:TTL 设置。

UPF 所接收的结构体

autoreply define upf_mp2_dns_rule
{
  u32 client_index;
  u32 context;
  u32 is_add;
  u8 app_id[32];
  u32 upf_dnsrule_id;
  string domain_name[256];
  vl_api_ip4_address_t ip4;
  vl_api_ip6_address_t ip6;
  u32 ttl;
};

MP2 API 解析成 UPF API

{
	"dnsRuleId":
	"domainName":
	"ipAddressType":
	"ipAddress":
	"ttl":
}

VPP-Agent 从 URL 里解析 APP Name 至 AppID 中;解析 domainName 到 DomainName ,解析 ipAddressType 和 ipAddress 到 ip4 或 ip6 中 。然后发出。

Acl Rule

UPF 北向 API 定义

type UeValue struct {
	Value string `binapi:"string[32],name=value" json:"value,omitempty"`
}

type UpfMp2ACLRule struct {
	IsAdd    uint32    `binapi:"u32,name=is_add" json:"is_add,omitempty"`
	AppID    []byte    `binapi:"u8[32],name=app_id" json:"app_id,omitempty"`
	ACLType  uint8     `binapi:"u8,name=acl_type" json:"acl_type,omitempty"`
	UeType   uint8     `binapi:"u8,name=ue_type" json:"ue_type,omitempty"`
	NUeValue uint8     `binapi:"u8,name=n_ue_value" json:"-"`
	UeValues []UeValue `binapi:"ue_value[n_ue_value],name=ue_values" json:"ue_values,omitempty"`
}
  • is_add

    0:删除

    1:添加或更新

  • app_id:APP Name

  • ACLType 黑白名单类型

    1:BLACK

    2:WHITE

  • UeType UE 信息类型

    1:IPADDRESS

    2:SUPI

    3:GPSI

    4:PEI

  • NUeValue:UE 个数

  • UeValue

    Value:具体 UE 值

UPF 所接收的结构体

typedef ue_value {
  string value[32];
};

autoreply define upf_mp2_acl_rule {
  u32 client_index;
  u32 context;
  u32 is_add;
  u8 app_id[32];
  u8 acl_type;
  u8 ue_type;
  u8 n_ue_value;
  vl_api_ue_value_t ue_values[n_ue_value];
};

MP2 API 解析成 UPF API

{
	"aclType":
	"ueTagList": [
		{
			"ueTag":
			"type":
			"value":
		}
	]
}

VPP-Agent 从 URL 里解析 APP Name 至 AppID 中;解析 aclType 到 acl_type,解析 UeTag 中 type 到 ue_type ,目前同时只支持一种类型,解析 UeTag 中 value 到 ue_values 中的 value。然后发出。

UE Information

UPF 北向 API 定义

type UpfUeInformation struct {
	UeidType  string `binapi:"string[32],name=ueid_type" json:"ueid_type,omitempty"`
	UeidValue string `binapi:"string[32],name=ueid_value" json:"ueid_value,omitempty"`
}
  • UeidType:UE 类型 ipaddress, supi, gpsi, pei。

  • UeidValue:UE 具体数值

UPF 所接收的结构体

define upf_ue_information
{
  u32 client_index;
  u32 context;
  string ueid_type[32];
  string ueid_value[32];
};

MP2 API 解析成 UPF API

GET
https://{ip}:{port}/mp2/v1/meps/{mepId}/ueinformation/query/ue_id?type={ueIdType}&value={ueIdValue}

解析 URL 中的 ueIdType 到 UeidType,解析 ueIdValue 到 UeidValue,然后发出。