def extra_pdrs(self): return [ IE_CreatePDR(IE_list=[ IE_FAR_Id(id=3), IE_PDI(IE_list=[ IE_NetworkInstance(instance="access"), self.ie_sdf_filter_for_redirect(), IE_SourceInterface(interface="Access"), self.ie_ue_ip_address(), ]), IE_PDR_Id(id=3), IE_Precedence(precedence=100), ]), IE_CreatePDR(IE_list=[ IE_FAR_Id(id=4), IE_PDI(IE_list=[ IE_NetworkInstance(instance="access"), IE_SDF_Filter( FD=1, flow_description="permit out ip from %s to assigned" % self.drop_ip), IE_SourceInterface(interface="Access"), self.ie_ue_ip_address(), ]), IE_PDR_Id(id=4), IE_Precedence(precedence=100), ]), ]
def establish_session(self): self.cur_seid = seid() resp = self.chat( PFCPSessionEstablishmentRequest(IE_list=[ IE_CreateFAR(IE_list=[ IE_ApplyAction(FORW=1), IE_FAR_Id(id=1), IE_ForwardingParameters(IE_list=[ IE_DestinationInterface(interface="SGi-LAN/N6-LAN"), IE_NetworkInstance(instance="sgi") ]) ]), self.reverse_far(), # FIXME: this is not handled properly :( IE_CreateFAR(IE_list=[ IE_ApplyAction(FORW=1), IE_FAR_Id(id=3), IE_ForwardingParameters(IE_list=[ IE_DestinationInterface(interface="SGi-LAN/N6-LAN"), IE_NetworkInstance(instance="sgi"), self.ie_redirect_information(), ]) ]), IE_CreateFAR(IE_list=[ IE_ApplyAction(DROP=1), IE_FAR_Id(id=4), ]), self.forward_pdr(), IE_CreatePDR(IE_list=[ IE_FAR_Id(id=2), IE_PDI(IE_list=[ IE_NetworkInstance(instance="sgi"), IE_SDF_Filter(FD=1, flow_description= "permit out ip from any to assigned"), IE_SourceInterface(interface="SGi-LAN/N6-LAN"), self.ie_ue_ip_address(SD=1) ]), IE_PDR_Id(id=2), IE_Precedence(precedence=200), ]) ] + self.extra_pdrs( ) + [self.ie_fseid(), IE_NodeId(id_type=2, id="ergw")]), PFCPSessionEstablishmentResponse, seid=self.cur_seid) self.assertEqual(CauseValues[resp[IE_Cause].cause], "Request accepted") self.verify_ie_fseid(resp[IE_FSEID]) self.assertEqual(resp[IE_FSEID].seid, self.cur_seid) if IE_CreatedPDR in resp: self.teid = resp[IE_CreatedPDR][IE_FTEID].TEID self.logger.info(self.teid)
def establish_session_request(self): self.cur_seid = seid() resp = self.chat( PFCPSessionEstablishmentRequest(IE_list=[ #UPLINK FAR=1,PDR=1 IE_CreateFAR(IE_list=[IE_ApplyAction( FORW=1), IE_FAR_Id(id=1)]), IE_CreatePDR(IE_list=[ IE_FAR_Id(id=1), IE_PDI(IE_list=[ IE_NetworkInstance(instance="access"), IE_SDF_Filter(FD=1, flow_description= "permit out ip from any to assigned"), IE_SourceInterface(interface="Access"), self.ie_ue_ip_address(SD=0), IE_FTEID(V4=1, TEID=1111, ipv4=N3_IP_V4) ]), IE_PDR_Id(id=1), IE_Precedence(precedence=200), IE_OuterHeaderRemoval(), ]), #DOWNLINK FAR=2,PDR=2 IE_CreateFAR(IE_list=[ IE_ApplyAction(FORW=1), IE_FAR_Id(id=2), IE_ForwardingParameters(IE_list=[ IE_DestinationInterface(interface="Access"), IE_NetworkInstance(instance="n6"), IE_OuterHeaderCreation( GTPUUDPIPV4=1, TEID=2222, ipv4=GNB_IP_V4) ]) ]), IE_CreatePDR(IE_list=[ IE_FAR_Id(id=2), IE_PDI(IE_list=[ IE_NetworkInstance(instance="n6"), IE_SourceInterface(interface="Core"), self.ie_ue_ip_address(SD=1) ]), IE_PDR_Id(id=2), IE_Precedence(precedence=200), IE_OuterHeaderRemoval(), ]), self.ie_fseid(), IE_NodeId(id_type=2, id="cp") ]), seid=self.cur_seid)
def reverse_far(self): return IE_CreateFAR(IE_list=[ IE_ApplyAction(FORW=1), IE_FAR_Id(id=2), IE_ForwardingParameters(IE_list=[ IE_DestinationInterface(interface="Access"), IE_NetworkInstance(instance="access") ]) ])
def forward_pdr(self): return IE_CreatePDR(IE_list=[ IE_FAR_Id(id=1), IE_PDI(IE_list=[ IE_NetworkInstance(instance="access"), IE_SDF_Filter( FD=1, flow_description="permit out ip from any to assigned"), IE_SourceInterface(interface="Access"), self.ie_ue_ip_address(), ]), IE_PDR_Id(id=1), IE_Precedence(precedence=200), ])
def establish_reporting_session(self, report_app=False): self.cur_seid = seid() resp = self.chat( PFCPSessionEstablishmentRequest(IE_list=filter_ies([ IE_CreateFAR(IE_list=[ IE_ApplyAction(FORW=1), IE_FAR_Id(id=1), IE_ForwardingParameters(IE_list=[ IE_DestinationInterface(interface="SGi-LAN/N6-LAN"), IE_NetworkInstance(instance="sgi") ]) ]), IE_CreateFAR(IE_list=[ IE_ApplyAction(FORW=1), IE_FAR_Id(id=2), IE_ForwardingParameters(IE_list=[ IE_DestinationInterface(interface="Access"), IE_NetworkInstance(instance="access") ]) ]), IE_CreateURR(IE_list=[ IE_MeasurementMethod(EVENT=1, VOLUM=1, DURAT=1), IE_ReportingTriggers(start_of_traffic=1), IE_TimeQuota(quota=60), IE_URR_Id(id=1) ]) if not report_app else None, IE_CreatePDR(IE_list=filter_ies([ IE_FAR_Id(id=1), IE_PDI(IE_list=[ IE_NetworkInstance(instance="access"), IE_SDF_Filter(FD=1, flow_description= "permit out ip from any to assigned"), IE_SourceInterface(interface="Access"), self.ie_ue_ip_address() ]), IE_PDR_Id(id=1), IE_Precedence(precedence=200), IE_URR_Id(id=1) if not report_app else None ])), IE_CreatePDR(IE_list=[ IE_FAR_Id(id=2), IE_PDI(IE_list=[ IE_NetworkInstance(instance="sgi"), IE_SDF_Filter(FD=1, flow_description= "permit out ip from any to assigned"), IE_SourceInterface(interface="SGi-LAN/N6-LAN"), self.ie_ue_ip_address(SD=1) ]), IE_PDR_Id(id=2), IE_Precedence(precedence=200), ]), IE_CreateURR(IE_list=[ IE_MeasurementMethod(VOLUM=1, DURAT=1), IE_ReportingTriggers(), IE_TimeQuota(quota=60), IE_URR_Id(id=2) ]) if report_app else None, IE_CreatePDR(IE_list=[ IE_FAR_Id(id=1), IE_PDI(IE_list=[ self.ie_sdf_filter_extra_for_app_pdi(), IE_ApplicationId(id="TST"), IE_NetworkInstance(instance="access"), IE_SourceInterface(interface="Access"), self.ie_ue_ip_address(), ]), IE_PDR_Id(id=3), IE_Precedence(precedence=100), IE_URR_Id(id=2) ]) if report_app else None, IE_CreatePDR(IE_list=[ IE_FAR_Id(id=2), IE_PDI(IE_list=[ # FIXME: this currently appears not to work # (to be fixed in ip-rules branch) # IE_SDF_Filter( # FD=1, # flow_description="permit out ip from %s to assigned" # % self.extra_sdf_ip), IE_ApplicationId(id="TST"), IE_NetworkInstance(instance="sgi"), IE_SourceInterface(interface="SGi-LAN/N6-LAN"), self.ie_ue_ip_address(SD=1), ]), IE_PDR_Id(id=4), # FIXME: likely a bug in 20.01 branch: PDR for DL # traffic must have lower precedence IE_Precedence(precedence=10), IE_URR_Id(id=2) ]) if report_app else None, self.ie_fseid(), IE_NodeId(id_type=2, id="ergw") ])), PFCPSessionEstablishmentResponse, seid=self.cur_seid) self.assertEqual(CauseValues[resp[IE_Cause].cause], "Request accepted") self.verify_ie_fseid(resp[IE_FSEID]) self.assertEqual(resp[IE_FSEID].seid, self.cur_seid)