Exemplo n.º 1
0
class AutonomousSystemFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = AutonomousSystem
        fields = [
            "asn",
            "name",
            "irr_as_set",
            "ipv6_max_prefixes",
            "ipv4_max_prefixes",
            "affiliated",
        ]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(irr_as_set__icontains=value)
                     | Q(comments__icontains=value))
        try:
            qs_filter |= Q(asn=int(value.strip()))
            qs_filter |= Q(ipv6_max_prefixes=int(value.strip()))
            qs_filter |= Q(ipv4_max_prefixes=int(value.strip()))
        except ValueError:
            pass
        return queryset.filter(qs_filter)
Exemplo n.º 2
0
class RouterFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    platform = django_filters.MultipleChoiceFilter(choices=Platform.choices,
                                                   null_value=None)
    local_autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__id",
        queryset=AutonomousSystem.objects.all(),
        to_field_name="id",
        label="Local AS",
    )
    tag = TagFilter()

    class Meta:
        model = Router
        fields = [
            "name",
            "hostname",
            "encrypt_passwords",
            "configuration_template",
            "last_deployment_id",
        ]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(hostname__icontains=value)
                     | Q(platform__icontains=value)
                     | Q(comments__icontains=value))
        return queryset.filter(qs_filter)
Exemplo n.º 3
0
class RoutingPolicyFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    type = django_filters.MultipleChoiceFilter(
        method="type_search",
        choices=RoutingPolicyType.choices,
        null_value=None)
    tag = TagFilter()

    class Meta:
        model = RoutingPolicy
        fields = ["name", "slug", "weight", "address_family", "comments"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(slug__icontains=value)
                     | Q(comments__icontains=value))
        return queryset.filter(qs_filter)

    def type_search(self, queryset, name, value):
        """
        Return routing policies based on
        """
        qs_filter = Q(type=RoutingPolicyType.IMPORT_EXPORT)
        for v in value:
            qs_filter |= Q(type=v)
        return queryset.filter(qs_filter)
Exemplo n.º 4
0
class InternetExchangeFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    local_autonomous_system_id = django_filters.ModelMultipleChoiceFilter(
        queryset=AutonomousSystem.objects.defer("prefixes"),
        label="Local AS (ID)")
    local_autonomous_system_asn = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__asn",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="asn",
        label="Local AS (ASN)",
    )
    local_autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__name",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="name",
        label="Local AS (Name)",
    )
    tag = TagFilter()

    class Meta:
        model = InternetExchange
        fields = ["id"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(slug__icontains=value)
                     | Q(local_autonomous_system__name__icontains=value))
        try:
            qs_filter |= Q(local_autonomous_system__asn=int(value.strip()))
        except ValueError:
            pass
        return queryset.filter(qs_filter)
Exemplo n.º 5
0
class InternetExchangeFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    router = django_filters.ModelMultipleChoiceFilter(
        field_name="router__id",
        queryset=Router.objects.all(),
        to_field_name="id",
        label="Router",
    )
    tag = TagFilter()

    class Meta:
        model = InternetExchange
        fields = ["name", "slug"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = Q(name__icontains=value) | Q(comments__icontains=value)
        try:
            ip = ipaddress.ip_interface(value.strip())
            qs_filter |= Q(ipv6_address__host=str(value))
            qs_filter |= Q(ipv4_address__host=str(value))
        except ValueError:
            pass
        return queryset.filter(qs_filter)
Exemplo n.º 6
0
class InternetExchangePeeringSessionFilterSet(BaseFilterSet,
                                              CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    autonomous_system_id = django_filters.ModelMultipleChoiceFilter(
        queryset=AutonomousSystem.objects.all(), label="Remote AS (ID)")
    autonomous_system_asn = django_filters.ModelMultipleChoiceFilter(
        field_name="autonomous_system__asn",
        queryset=AutonomousSystem.objects.all(),
        to_field_name="asn",
        label="Remote AS (ASN)",
    )
    autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="autonomous_system__name",
        queryset=AutonomousSystem.objects.all(),
        to_field_name="name",
        label="Remote AS (Name)",
    )
    ixp_connection_id = django_filters.ModelMultipleChoiceFilter(
        queryset=Connection.objects.all(), label="IXP Connection (ID)")
    internet_exchange_id = django_filters.ModelMultipleChoiceFilter(
        field_name="ixp_connection__internet_exchange_point",
        queryset=InternetExchange.objects.all(),
        label="IX (ID)",
    )
    internet_exchange = django_filters.ModelMultipleChoiceFilter(
        field_name="ixp_connection__internet_exchange_point__name",
        queryset=InternetExchange.objects.all(),
        to_field_name="name",
        label="IX (Name)",
    )
    address_family = django_filters.NumberFilter(
        method="address_family_search")
    tag = TagFilter()

    class Meta:
        model = InternetExchangePeeringSession
        fields = ["id", "multihop_ttl", "enabled", "is_route_server"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (
            Q(service_reference__icontains=value)
            | Q(autonomous_system__name__icontains=value)
            | Q(ixp_connection__router__name__icontains=value)
            | Q(ixp_connection__router__hostname__icontains=value)
            | Q(ixp_connection__internet_exchange_point__name__icontains=value)
            |
            Q(ixp_connection__internet_exchange_point__slug__icontains=value))
        try:
            ip = ipaddress.ip_interface(value.strip())
            qs_filter |= Q(ip_address__host=str(ip))
        except ValueError:
            pass
        return queryset.filter(qs_filter)

    def address_family_search(self, queryset, name, value):
        if value in [4, 6]:
            return queryset.filter(Q(ip_address__family=value))
        return queryset
Exemplo n.º 7
0
class BGPGroupFilterSet(BaseFilterSet, CreatedUpdatedFilterSet,
                        NameSlugSearchFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = BGPGroup
        fields = ["id"]
Exemplo n.º 8
0
class CommunityFilterSet(BaseFilterSet, CreatedUpdatedFilterSet,
                         NameSlugSearchFilterSet):
    type = django_filters.MultipleChoiceFilter(choices=CommunityType.choices,
                                               null_value="")
    tag = TagFilter()

    class Meta:
        model = Community
        fields = ["id", "value", "type"]
Exemplo n.º 9
0
class BGPGroupFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = BGPGroup
        fields = ["name"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        return queryset.filter(name__icontains=value)
Exemplo n.º 10
0
class InternetExchangeFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    local_autonomous_system_id = django_filters.ModelMultipleChoiceFilter(
        queryset=AutonomousSystem.objects.all(), label="Local AS (ID)")
    local_autonomous_system_asn = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__asn",
        queryset=AutonomousSystem.objects.all(),
        to_field_name="asn",
        label="Local AS (ASN)",
    )
    local_autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__name",
        queryset=AutonomousSystem.objects.all(),
        to_field_name="name",
        label="Local AS (Name)",
    )
    router_id = django_filters.ModelMultipleChoiceFilter(
        queryset=Router.objects.all(), label="Router (ID)")
    router_name = django_filters.ModelMultipleChoiceFilter(
        field_name="router__name",
        queryset=Router.objects.all(),
        to_field_name="name",
        label="Router (Name)",
    )
    router = django_filters.ModelMultipleChoiceFilter(
        field_name="router__hostname",
        queryset=Router.objects.all(),
        to_field_name="hostname",
        label="Router (Hostname)",
    )
    tag = TagFilter()

    class Meta:
        model = InternetExchange
        fields = ["id"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(slug__icontains=value)
                     | Q(local_autonomous_system__name__icontains=value))
        try:
            qs_filter |= Q(local_autonomous_system__asn=int(value.strip()))
        except ValueError:
            pass
        try:
            ip = ipaddress.ip_interface(value.strip())
            qs_filter |= Q(ipv6_address__host=str(value))
            qs_filter |= Q(ipv4_address__host=str(value))
        except ValueError:
            pass
        return queryset.filter(qs_filter)
Exemplo n.º 11
0
class InternetExchangePeeringSessionFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    autonomous_system__id = django_filters.ModelMultipleChoiceFilter(
        field_name="autonomous_system__id",
        queryset=AutonomousSystem.objects.all(),
        to_field_name="id",
    )
    internet_exchange__id = django_filters.ModelMultipleChoiceFilter(
        field_name="internet_exchange__id",
        queryset=InternetExchange.objects.all(),
        to_field_name="id",
    )
    address_family = django_filters.NumberFilter(method="address_family_search")
    tag = TagFilter()

    class Meta:
        model = InternetExchangePeeringSession
        fields = [
            "multihop_ttl",
            "enabled",
            "is_route_server",
            "autonomous_system__asn",
            "autonomous_system__id",
            "autonomous_system__name",
            "internet_exchange__name",
            "internet_exchange__id",
        ]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (
            Q(autonomous_system__name__icontains=value)
            | Q(internet_exchange__name__icontains=value)
            | Q(internet_exchange__slug__icontains=value)
            | Q(comments__icontains=value)
        )
        try:
            ip = ipaddress.ip_interface(value.strip())
            qs_filter |= Q(ip_address__host=str(ip))
        except ValueError:
            pass
        try:
            qs_filter |= Q(autonomous_system__asn=int(value.strip()))
        except ValueError:
            pass
        return queryset.filter(qs_filter)

    def address_family_search(self, queryset, name, value):
        if value in [4, 6]:
            return queryset.filter(Q(ip_address__family=value))
        return queryset
Exemplo n.º 12
0
class ConfigurationFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = Configuration
        fields = ["id", "jinja2_trim", "jinja2_lstrip"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        return queryset.filter(
            Q(name__icontains=value) | Q(template__icontains=value))
Exemplo n.º 13
0
class ConfigurationFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = Configuration
        fields = ["name", "comments"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(template__icontains=value)
                     | Q(comments__icontains=value))
        return queryset.filter(qs_filter)
Exemplo n.º 14
0
class TemplateFilter(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    type = django_filters.MultipleChoiceFilter(choices=TEMPLATE_TYPE_CHOICES,
                                               null_value=None)
    tag = TagFilter()

    class Meta:
        model = Template
        fields = ["name"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = Q(name__icontains=value) | Q(template__icontains=value)
        return queryset.filter(qs_filter)
Exemplo n.º 15
0
class EmailFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = Email
        fields = ["id"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        return queryset.filter(
            Q(name__icontains=value)
            | Q(subject__icontains=value)
            | Q(template__icontains=value))
Exemplo n.º 16
0
class AutonomousSystemFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = AutonomousSystem
        fields = [
            "id", "asn", "ipv6_max_prefixes", "ipv4_max_prefixes", "affiliated"
        ]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        return queryset.filter(
            Q(name__icontains=value) | Q(irr_as_set__icontains=value))
Exemplo n.º 17
0
class RouterFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    local_autonomous_system_id = django_filters.ModelMultipleChoiceFilter(
        queryset=AutonomousSystem.objects.defer("prefixes"),
        label="Local AS (ID)")
    local_autonomous_system_asn = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__asn",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="asn",
        label="Local AS (ASN)",
    )
    local_autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__name",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="name",
        label="Local AS (Name)",
    )
    platform_id = django_filters.ModelMultipleChoiceFilter(
        queryset=Platform.objects.all(), label="Platform (ID)")
    platform = django_filters.ModelMultipleChoiceFilter(
        field_name="platform__name",
        queryset=Platform.objects.all(),
        to_field_name="name",
        label="Platform (Name)",
    )
    configuration_template_id = django_filters.ModelMultipleChoiceFilter(
        queryset=Configuration.objects.all(), label="Configuration (ID)")
    configuration_template = django_filters.ModelMultipleChoiceFilter(
        field_name="configuration_template__name",
        queryset=Configuration.objects.all(),
        to_field_name="name",
        label="Configuration (Name)",
    )
    device_state = django_filters.MultipleChoiceFilter(
        choices=DeviceState.choices, null_value=None)
    tag = TagFilter()

    class Meta:
        model = Router
        fields = ["id", "name", "hostname", "encrypt_passwords"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        return queryset.filter(
            Q(name__icontains=value)
            | Q(hostname__icontains=value)
            | Q(platform__name__icontains=value))
Exemplo n.º 18
0
class CommunityFilter(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = Community
        fields = ["name", "value", "type"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(value__icontains=value)
                     | Q(type__icontains=value)
                     | Q(comments__icontains=value))
        return queryset.filter(qs_filter)
Exemplo n.º 19
0
class RoutingPolicyFilterSet(BaseFilterSet, CreatedUpdatedFilterSet,
                             NameSlugSearchFilterSet):
    type = django_filters.MultipleChoiceFilter(
        method="type_search",
        choices=RoutingPolicyType.choices,
        null_value=None)
    tag = TagFilter()

    class Meta:
        model = RoutingPolicy
        fields = ["id", "weight", "address_family"]

    def type_search(self, queryset, name, value):
        qs_filter = Q(type=RoutingPolicyType.IMPORT_EXPORT)
        for v in value:
            qs_filter |= Q(type=v)
        return queryset.filter(qs_filter)
Exemplo n.º 20
0
class RouterFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    platform = django_filters.MultipleChoiceFilter(choices=PLATFORM_CHOICES,
                                                   null_value=None)
    tag = TagFilter()

    class Meta:
        model = Router
        fields = ["name", "hostname", "last_deployment_id"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(name__icontains=value)
                     | Q(hostname__icontains=value)
                     | Q(platform__icontains=value)
                     | Q(comments__icontains=value))
        return queryset.filter(qs_filter)
Exemplo n.º 21
0
class ConnectionFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    state = django_filters.MultipleChoiceFilter(
        choices=ConnectionState.choices, null_value=None)
    internet_exchange_point_id = django_filters.ModelMultipleChoiceFilter(
        queryset=InternetExchange.objects.all(), label="IXP (ID)")
    internet_exchange_point = django_filters.ModelMultipleChoiceFilter(
        field_name="internet_exchange_point__name",
        queryset=InternetExchange.objects.all(),
        to_field_name="name",
        label="IXP (Name)",
    )
    router_id = django_filters.ModelMultipleChoiceFilter(
        queryset=Router.objects.all(), label="Router (ID)")
    router_name = django_filters.ModelMultipleChoiceFilter(
        field_name="router__name",
        queryset=Router.objects.all(),
        to_field_name="name",
        label="Router (Name)",
    )
    router = django_filters.ModelMultipleChoiceFilter(
        field_name="router__hostname",
        queryset=Router.objects.all(),
        to_field_name="hostname",
        label="Router (Hostname)",
    )
    tag = TagFilter()

    class Meta:
        model = Connection
        fields = ["id", "vlan"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = Q(interface__icontains=value)
        try:
            ip = ipaddress.ip_interface(value.strip())
            qs_filter |= Q(ipv6_address__host=str(ip)) | Q(
                ipv4_address__host=str(ip))
        except ValueError:
            pass
        return queryset.filter(qs_filter)
Exemplo n.º 22
0
class ContactFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    tag = TagFilter()

    class Meta:
        model = Contact
        fields = ["id", "name", "title", "phone", "email", "address"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        return queryset.filter(
            Q(name__icontains=value)
            | Q(title__icontains=value)
            | Q(phone__icontains=value)
            | Q(email__icontains=value)
            | Q(address__icontains=value)
            | Q(comments__icontains=value)
        )
Exemplo n.º 23
0
class DirectPeeringSessionFilterSet(django_filters.FilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    local_autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__id",
        queryset=AutonomousSystem.objects.all(),
        to_field_name="id",
        label="Local AS",
    )
    address_family = django_filters.NumberFilter(
        method="address_family_search")
    relationship = django_filters.MultipleChoiceFilter(
        choices=BGPRelationship.choices, null_value=None)
    router = django_filters.ModelMultipleChoiceFilter(
        field_name="router__id",
        queryset=Router.objects.all(),
        to_field_name="id",
        label="Router",
    )
    tag = TagFilter()

    class Meta:
        model = DirectPeeringSession
        fields = ["multihop_ttl", "enabled"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = Q(relationship__icontains=value) | Q(
            comments__icontains=value)
        try:
            ip = ipaddress.ip_interface(value.strip())
            qs_filter |= Q(ip_address__host=str(ip)) | Q(
                local_ip_address__host=str(ip))
        except ValueError:
            pass
        return queryset.filter(qs_filter)

    def address_family_search(self, queryset, name, value):
        if value in [4, 6]:
            return queryset.filter(Q(ip_address__family=value))
        return queryset
Exemplo n.º 24
0
class DirectPeeringSessionFilterSet(BaseFilterSet, CreatedUpdatedFilterSet):
    q = django_filters.CharFilter(method="search", label="Search")
    local_autonomous_system_id = django_filters.ModelMultipleChoiceFilter(
        queryset=AutonomousSystem.objects.defer("prefixes"),
        label="Local AS (ID)")
    local_autonomous_system_asn = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__asn",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="asn",
        label="Local AS (ASN)",
    )
    local_autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="local_autonomous_system__name",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="name",
        label="Local AS (Name)",
    )
    autonomous_system_id = django_filters.ModelMultipleChoiceFilter(
        queryset=AutonomousSystem.objects.defer("prefixes"),
        label="Remote AS (ID)")
    autonomous_system_asn = django_filters.ModelMultipleChoiceFilter(
        field_name="autonomous_system__asn",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="asn",
        label="Remote AS (ASN)",
    )
    autonomous_system = django_filters.ModelMultipleChoiceFilter(
        field_name="autonomous_system__name",
        queryset=AutonomousSystem.objects.defer("prefixes"),
        to_field_name="name",
        label="Remote AS (Name)",
    )
    bgp_group_id = django_filters.ModelMultipleChoiceFilter(
        queryset=BGPGroup.objects.all(), label="BGP Group (ID)")
    bgp_group = django_filters.ModelMultipleChoiceFilter(
        field_name="bgp_group__name",
        queryset=BGPGroup.objects.all(),
        to_field_name="name",
        label="BGP Group (Name)",
    )
    address_family = django_filters.NumberFilter(
        method="address_family_search")
    relationship_id = django_filters.ModelMultipleChoiceFilter(
        queryset=Relationship.objects.all(), label="Relationship (ID)")
    relationship = django_filters.ModelMultipleChoiceFilter(
        field_name="relationship__name",
        queryset=Relationship.objects.all(),
        to_field_name="name",
        label="Relationship (Name)",
    )
    router_id = django_filters.ModelMultipleChoiceFilter(
        queryset=Router.objects.all(), label="Router (ID)")
    router_name = django_filters.ModelMultipleChoiceFilter(
        field_name="router__name",
        queryset=Router.objects.all(),
        to_field_name="name",
        label="Router (Name)",
    )
    router = django_filters.ModelMultipleChoiceFilter(
        field_name="router__hostname",
        queryset=Router.objects.all(),
        to_field_name="hostname",
        label="Router (Hostname)",
    )
    tag = TagFilter()

    class Meta:
        model = DirectPeeringSession
        fields = ["id", "multihop_ttl", "enabled"]

    def search(self, queryset, name, value):
        if not value.strip():
            return queryset
        qs_filter = (Q(service_reference__icontains=value)
                     | Q(autonomous_system__name__icontains=value)
                     | Q(bgp_group__name__icontains=value)
                     | Q(bgp_group__slug__icontains=value)
                     | Q(router__name__icontains=value)
                     | Q(router__hostname__icontains=value))
        try:
            ip = ipaddress.ip_interface(value.strip())
            qs_filter |= Q(ip_address__host=str(ip)) | Q(
                local_ip_address__host=str(ip))
        except ValueError:
            pass
        return queryset.filter(qs_filter)

    def address_family_search(self, queryset, name, value):
        if value in [4, 6]:
            return queryset.filter(Q(ip_address__family=value))
        return queryset