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,然后发出。