## 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" } ```