Commit 12da34e9 authored by Mark Canterbury's avatar Mark Canterbury
Browse files

TS 103 221-1 CR041 - Adding Traffic Policies

parent 717e5908
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@
            <xs:element name="productID" type="XId" minOccurs="0"/>
            <xs:element name="listOfServiceTypes" type="ListOfServiceTypes" minOccurs="0"/>
            <xs:element name="taskDetailsExtensions" type="TaskDetailsExtensions" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="listOfTrafficPolicyReferences" type="ListOfTrafficPolicyReferences" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ListOfTargetIdentifiers">
@@ -251,6 +252,7 @@
            <xs:element name="listOfDIDs" type="ListOfDids" minOccurs="0"/>
            <xs:element name="mediationDetailsExtensions" type="MediationDetailsExtensions" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="serviceScopingOptions" type="ListOfServiceScopingOptions" minOccurs="0"/>
            <xs:element name="listOfTrafficPolicyReferences" type="ListOfTrafficPolicyReferences" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ListOfServiceScopingOptions">
@@ -319,6 +321,14 @@
            <xs:element name="dSId" type="GenericObjectID" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ListOfTrafficPolicyReferences">
        <xs:sequence>
            <xs:element name="trafficPolicyReference" type="TrafficPolicyReference" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="TrafficPolicyReference">
        <xs:restriction base="GenericObjectID"/>
    </xs:simpleType>    
    <xs:complexType name="ListOfMediationDetails">
        <xs:sequence>
            <xs:element name="mediationDetails" type="MediationDetails" minOccurs="0" maxOccurs="unbounded"/>
+25 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://uri.etsi.org/03221/X1/2023/02/TrafficPolicy" xmlns:x1="http://uri.etsi.org/03221/X1/2017/10" xmlns:etsi103280="http://uri.etsi.org/03280/common/2017/07" xmlns:hi1Policy="http://uri.etsi.org/03120/common/2022/07/TrafficPolicy" targetNamespace="http://uri.etsi.org/03221/X1/2023/02/TrafficPolicy" elementFormDefault="qualified" version="1.10.1">
    <xs:import namespace="http://uri.etsi.org/03280/common/2017/07"/>
    <xs:import namespace="http://uri.etsi.org/03221/X1/2017/10"/>
    <xs:import namespace="http://uri.etsi.org/03120/common/2022/07/TrafficPolicy"/>
    <!-- Message containers -->
    <xs:complexType name="TrafficPolicyObject">
        <xs:complexContent>
            <xs:extension base="x1:GenericObject">
                <xs:sequence>
                    <xs:group ref="hi1Policy:TrafficPolicyObjectGroup"></xs:group>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="TrafficRuleObject">
        <xs:complexContent>
            <xs:extension base="x1:GenericObject">
                <xs:sequence>
                    <xs:group ref="hi1Policy:TrafficRuleObjectGroup"></xs:group>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>
+64 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<X1Request xmlns="http://uri.etsi.org/03221/X1/2017/10" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:policy="http://uri.etsi.org/03221/X1/2023/02/TrafficPolicy" xmlns:hi1Policy="http://uri.etsi.org/03120/common/2022/07/TrafficPolicy" xmlns:ts103280="http://uri.etsi.org/03280/common/2017/07" xmlns:hi1Common="http://uri.etsi.org/03120/common/2016/02/Common">
    <x1RequestMessage  xsi:type="CreateObjectRequest">
        <admfIdentifier>admfID</admfIdentifier>
        <neIdentifier>neID</neIdentifier>
        <messageTimestamp>2023-02-14T18:46:21.247432Z</messageTimestamp>
        <version>v1.13.1</version>
        <x1TransactionId>2654a277-bafb-4240-9143-806ee41a3751</x1TransactionId>
        <createObject xsi:type="policy:TrafficRuleObject">
            <objectId>6c67de93-926a-488b-9435-b0a30c20f676</objectId>
            <hi1Policy:Criteria>
                <hi1Policy:Criteria>
                    <hi1Policy:IPPolicyCriteria>
                        <hi1Policy:SourceIPRange>
                            <ts103280:IPv4CIDR>203.0.113.0/24</ts103280:IPv4CIDR>
                        </hi1Policy:SourceIPRange>
                    </hi1Policy:IPPolicyCriteria>
                </hi1Policy:Criteria>
            </hi1Policy:Criteria>
            <hi1Policy:Action>
                <hi1Common:Owner>ETSI</hi1Common:Owner>
                <hi1Common:Name>PolicyAction</hi1Common:Name>
                <hi1Common:Value>PDSR</hi1Common:Value>
            </hi1Policy:Action>
        </createObject>
    </x1RequestMessage>
    <x1RequestMessage xsi:type="CreateObjectRequest">
        <admfIdentifier>admfID</admfIdentifier>
        <neIdentifier>neID</neIdentifier>
        <messageTimestamp>2023-02-14T18:46:21.247432Z</messageTimestamp>
        <version>v1.13.1</version>
        <x1TransactionId>2654a277-bafb-4240-9143-806ee41a3751</x1TransactionId>
        <createObject xsi:type="policy:TrafficPolicyObject">
            <objectId>b04057af-362f-4e8d-9337-416f43bfd7ec</objectId>
            <hi1Policy:TrafficPolicyName>Template Rule 1</hi1Policy:TrafficPolicyName>
            <hi1Policy:TrafficRules>
                <hi1Policy:TrafficRuleReference>
                    <hi1Policy:Order>1</hi1Policy:Order>
                    <hi1Policy:ObjectIdentifier>6c67de93-926a-488b-9435-b0a30c20f676</hi1Policy:ObjectIdentifier>
                </hi1Policy:TrafficRuleReference>
            </hi1Policy:TrafficRules>
        </createObject>
    </x1RequestMessage>
    <x1RequestMessage xsi:type="ActivateTaskRequest">
        <admfIdentifier>admfID</admfIdentifier>
        <neIdentifier>neID</neIdentifier>
        <messageTimestamp>2023-02-14T18:46:21.247432Z</messageTimestamp>
        <version>v1.13.1</version>
        <x1TransactionId>211900a7-afb5-4187-b036-c85a92ab94aa</x1TransactionId>
        <taskDetails>
            <xId>2f5faff3-077d-4ec3-b66a-226e3a921eec</xId>
            <targetIdentifiers>
                <targetIdentifier>
                    <e164Number>447700900000</e164Number>
                </targetIdentifier>
            </targetIdentifiers>
            <deliveryType>X2andX3</deliveryType>
            <listOfDIDs></listOfDIDs>
            <listOfTrafficPolicyReferences>
                <trafficPolicyReference>b04057af-362f-4e8d-9337-416f43bfd7ec</trafficPolicyReference>
            </listOfTrafficPolicyReferences>
        </taskDetails>
    </x1RequestMessage>    
</X1Request>

create_attachments.py

0 → 100644
+60 −0
Original line number Diff line number Diff line
from io import BytesIO
from pathlib import Path
import logging
import zipfile

# For ETSI portal attachments, a single zip archive is created which
# contains:
# - All files in the top-level spec directory
# - A zipfile for each subdirectory, which contains all the files in that subdirectory
# This second step is recursive, so each zip file contains only files and other zipfiles, never subdirectories
# For an explanation as to *why* this is the case, speak to your ETSI technical officer.
#
# Example: Assuming the files for the portal attachment are of the following form:
#
# (contents of directory)
# - top_level_file.ext
# - subdirectory_1
#   - subdirectory_1_file.ext
# - subdirectory_2
#   - subdirectory_2_file.ext
# - TS 102 232-1
#
# ...then the correct form for ETSI portal attachments is as follows
#
# ts_xxxxxx_vxxyyzzp0.zip
# which contains:
# - top_level_file.ext
# - subdirectory_1.zip
#   (which contains)
#   - subdirectory_1_file.ext
# - subdirectory_2.zip
#   (which contains)
#   - subdirectory_2_file.ext


def recursively_zip_directory(directory: Path, zipname: str, recursion=0):
    logging.info(
        f"{'':{recursion * 4}}Packaging contents of {directory} into {zipname}"
    )
    buffer = BytesIO()
    zip = zipfile.ZipFile(buffer, "a")
    for f in directory.iterdir():
        if f.is_file():
            logging.info(f"{'':{recursion * 4}}Adding file: {f}")
            zip.write(f, f.name)
        elif f.is_dir():
            zipname = f.with_suffix(".zip").name
            logging.info(f"{'':{recursion * 4}}Adding archive: {f}")
            recurse_buffer = recursively_zip_directory(f, zipname, recursion + 1)
            zip.writestr(zipname, recurse_buffer.getvalue())
    return buffer


if __name__ == "__main__":
    logging.info("Creating attachments...")
    for directory in Path(".").glob("1*"):
        zip_name = f"ts_{directory.name}vXXYYZZp0.zip"
        zip_buffer = recursively_zip_directory(directory, zip_name)
        with open(zip_name, "wb") as f:
            f.write(zip_buffer.getvalue())
+6 −1
Original line number Diff line number Diff line
@@ -15,8 +15,13 @@
            "103221-1/TS_103_221_01.xsd",
            "103221-1/TS_103_221_01_HashedID.xsd",
            "103221-1/TS_103_221_01_DestinationSet.xsd",
            "103221-1/TS_103_221_01_TrafficPolicy.xsd",
            "103280/TS_103_280.xsd",
            "103221-1/examples/ExampleGenericObjects.xsd"
            "103221-1/examples/ExampleGenericObjects.xsd",
            "103120/schema/ts_103120_Common.xsd",
            "103120/schema/ts_103120_Core.xsd",
            "103120/schema/ts_103120_TrafficPolicy.xsd",
            "testing/deps/xmldsig/xmldsig-core-schema.xsd"
        ],
        "exampleFiles" : [
            "103221-1/examples"