UE 信息查询实现
需求
通过 MP2 接口输入 过滤的type 和具体数据进行 UE 的信息查询
具体方法:https://{ip}:{port}/mp2/v1/meps/{mepId}/ueinformation/query/ue_id?type={ueIdType}&value={ueIdValue}
需要解析 type 和 value 的值
UPF API
通过 upf.api 进行生成的 upf.ba.go
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"`
}
北向 Restful
/plugins/vpp/upfplugin/rest_api.go
func (p *UpfPlugin) registerHandlers(http rest.HTTPHandlers) {
http.RegisterHTTPHandler(mp2 + ueInfo, p.mp2GetUeInfoHandler, "GET")
}
通过 args := req.URL.Query() 获取到具体参数,然后通过
entry := &models.UpfUeInformation{
UeidType: []byte(ueIdType),
UeidValue: []byte(ueIdValue),
}
组装具体请求结构体,进行请求,返回 ueInfo
ueInfo, err := p.upfHandler.VppGetUeInfo(entry)
err = h.callsChannel.SendRequest(request).ReceiveReply(reply)
解析 reply 返回结果
返回结果
如果查询不到,返回对应查询错误,例如:
"500 Internal server error: sending request failed: VppGetUeInfo error MP2VPPApiError: Session Lookup Error (-9)\n"
如果查询到,则返回 200 和 正确结果
# curl -X GET "http://127.0.0.1:9191/mp2/v1/meps/123/ueinformation/query/ue_id?type=ipaddress&value=172.20.231.1"
{
"address": "172.20.231.1",
"supi": "466920100001101"
}