[要約] RFC 8956はIPv6フロー仕様ルールの普及に関する文書で、ネットワークトラフィックの管理とセキュリティ向上を目的としています。この規格は、特に大規模ネットワークやISP環境でのDDoS攻撃対策やトラフィックエンジニアリングに利用されます。

Internet Engineering Task Force (IETF)                     C. Loibl, Ed.
Request for Comments: 8956                       next layer Telekom GmbH
Updates: 8955                                             R. Raszuk, Ed.
Category: Standards Track                        NTT Network Innovations
ISSN: 2070-1721                                            S. Hares, Ed.
                                                                  Huawei
                                                           December 2020
        

Dissemination of Flow Specification Rules for IPv6

IPv6のフロー仕様規則の普及

Abstract

概要

"Dissemination of Flow Specification Rules" (RFC 8955) provides a Border Gateway Protocol (BGP) extension for the propagation of traffic flow information for the purpose of rate limiting or filtering IPv4 protocol data packets.

「フロー仕様規則の普及」(RFC 8955)は、IPv4プロトコルデータパケットの速度制限またはフィルタリングの目的で、トラフィックフロー情報の伝播のための境界ゲートウェイプロトコル(BGP)拡張を提供します。

This document extends RFC 8955 with IPv6 functionality. It also updates RFC 8955 by changing the IANA Flow Spec Component Types registry.

このドキュメントはIPv6機能を備えたRFC 8955を拡張します。また、IANA Flow Specコンポーネントタイプレジストリを変更することで、RFC 8955も更新します。

Status of This Memo

本文書の位置付け

This is an Internet Standards Track document.

これはインターネット規格のトラック文書です。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.

この文書は、インターネットエンジニアリングタスクフォース(IETF)の製品です。IETFコミュニティのコンセンサスを表します。それは公開レビューを受け、インターネットエンジニアリングステアリンググループ(IESG)による出版の承認を受けました。インターネット規格に関する詳細情報は、RFC 7841のセクション2で利用できます。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc8956.

この文書の現在のステータス、任意のエラータ、およびフィードバックを提供する方法に関する情報は、https://www.rfc-editor.org/info/frfc8956で入手できます。

Copyright Notice

著作権表示

Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved.

Copyright(C)2020 IETFの信頼と文書著者として識別された人。全著作権所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

このドキュメントは、このドキュメントの発行日に有効なBCP 78およびIETFドキュメントに関連するIETFトラストの法的規定(https://trustee.ietf.org/license-info)の対象となります。 これらのドキュメントは、このドキュメントに関するお客様の権利と制限について説明しているため、注意深く確認してください。 このドキュメントから抽出されたコードコンポーネントには、Trust LegalProvisionsのセクション4.eで説明されているSimplifiedBSD Licenseテキストが含まれている必要があり、Simplified BSDLicenseで説明されているように保証なしで提供されます。

Table of Contents

目次

   1.  Introduction
     1.1.  Definitions of Terms Used in This Memo
   2.  IPv6 Flow Specification Encoding in BGP
   3.  IPv6 Flow Specification Components
     3.1.  Type 1 - Destination IPv6 Prefix
     3.2.  Type 2 - Source IPv6 Prefix
     3.3.  Type 3 - Upper-Layer Protocol
     3.4.  Type 7 - ICMPv6 Type
     3.5.  Type 8 - ICMPv6 Code
     3.6.  Type 12 - Fragment
     3.7.  Type 13 - Flow Label (new)
     3.8.  Encoding Examples
   4.  Ordering of Flow Specifications
   5.  Validation Procedure
   6.  IPv6 Traffic Filtering Action Changes
     6.1.  Redirect IPv6 (rt-redirect-ipv6) Type 0x000d
   7.  Security Considerations
   8.  IANA Considerations
     8.1.  Flow Spec IPv6 Component Types
     8.2.  IPv6-Address-Specific Extended Community Flow Spec IPv6
           Actions
   9.  Normative References
   Appendix A.  Example Python Code: flow_rule_cmp_v6
   Acknowledgments
   Contributors
   Authors' Addresses
        
1. Introduction
1. はじめに

The growing amount of IPv6 traffic in private and public networks requires the extension of tools used in IPv4-only networks to also support IPv6 data packets.

プライベートネットワークとパブリックネットワーク内のIPv6トラフィックの量の増加には、IPv4のみのネットワークで使用されるツールの拡張がIPv6データパケットもサポートする必要があります。

This document analyzes the differences between describing IPv6 [RFC8200] flows and those of IPv4 packets. It specifies new Border Gateway Protocol [RFC4271] encoding formats to enable "Dissemination of Flow Specification Rules" [RFC8955] for IPv6.

この文書は、IPv6 [RFC8200]フローとIPv4パケットの記述の違いを分析します。IPv6用の「フロー仕様ルールの普及」[RFC8955]を有効にするための新しいボーダーゲートウェイプロトコル[RFC4271]エンコードフォーマットを指定します。

This specification is an extension of the base established in [RFC8955]. It only defines the delta changes required to support IPv6, while all other definitions and operation mechanisms of "Dissemination of Flow Specification Rules" will remain in the main specification and will not be repeated here.

この仕様は[RFC8955]で確立されたベースの拡張です。IPv6をサポートするために必要なデルタの変更を定義します。

1.1. Definitions of Terms Used in This Memo
1.1. このメモで使用される用語の定義

AFI: Address Family Identifier

AFI:アドレスファミリID

AS: Autonomous System

A:自律システム

NLRI: Network Layer Reachability Information

NLRI:ネットワーク層到達可能性情報

SAFI: Subsequent Address Family Identifier

SAFI:その後のアドレスファミリID

VRF: Virtual Routing and Forwarding

VRF:仮想ルーティングと転送

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

この文書のキーワード "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", および "OPTIONAL" はBCP 14 [RFC2119] [RFC8174]で説明されているように、すべて大文字の場合にのみ解釈されます。

2. IPv6 Flow Specification Encoding in BGP
2. BGPでのIPv6フロー仕様エンコーディング

[RFC8955] defines SAFIs 133 (Dissemination of Flow Specification rules) and 134 (L3VPN Dissemination of Flow Specification rules) in order to carry the corresponding Flow Specification.

[RFC8955]対応するフロー仕様を搬送するためのSAFIS 133(フロー仕様規則の普及)と134(Flow仕様規則のL3VPN普及)を定義します。

Implementations wishing to exchange IPv6 Flow Specifications MUST use BGP's Capability Advertisement facility to exchange the Multiprotocol Extension Capability Code (Code 1), as defined in [RFC4760]. The (AFI, SAFI) pair carried in the Multiprotocol Extension Capability MUST be (AFI=2, SAFI=133) for IPv6 Flow Specification rules and (AFI=2, SAFI=134) for L3VPN Dissemination of Flow Specification rules.

IPv6フローの仕様を交換することを望む実装は、[RFC4760]で定義されているように、Multiprotocol拡張機能コード(コード1)を交換するためにBGPの機能広告機能を使用する必要があります。MultiProtocol拡張機能で運ばれる(AFI、SAFI)ペアは、L3VPNのL3VPN普及のためのIPv6フロー仕様規則の場合(AFI = 2、SAFI = 133)でなければなりません(AFI = 2、SAFI = 133)。

3. IPv6 Flow Specification Components
3. IPv6フロー仕様コンポーネント

The encoding of each of the components begins with a Type field (1 octet) followed by a variable length parameter. The following sections define component types and parameter encodings for IPv6.

各コンポーネントの符号化は、型フィールド(1オクテット)とそれに続く可変長パラメータで始まる。次のセクションでは、IPv6のコンポーネントタイプとパラメータエンコードを定義します。

Types 4 (Port), 5 (Destination Port), 6 (Source Port), 9 (TCP Flags), 10 (Packet Length), and 11 (DSCP), as defined in [RFC8955], also apply to IPv6. Note that IANA has updated the "Flow Spec Component Types" registry in order to contain both IPv4 and IPv6 Flow Specification component type numbers in a single registry (Section 8).

[RFC8955]で定義されている[RFC8955]で定義されているように、タイプ4(ポート)、5(宛先ポート)、6(TCPフラグ)、10(パケット長)、および11(DSCP))もIPv6に適用されます。IANAは、IPv4とIPv6の両方のフロー仕様コンポーネントタイプ番号を単一のレジストリに含めるために、 "Flow Spec Component Types"レジストリを更新しました(セクション8)。

3.1. Type 1 - Destination IPv6 Prefix
3.1. タイプ1 - 宛先IPv6プレフィックス

Encoding: <type (1 octet), length (1 octet), offset (1 octet), pattern (variable), padding (variable) >

エンコード:<タイプ(1オクテット)、長さ(1オクテット)、オフセット(1オクテット)、パターン(変数)、パディング(変数)>

This defines the destination prefix to match. The offset has been defined to allow for flexible matching to portions of an IPv6 address where one is required to skip over the first N bits of the address. (These bits skipped are often indicated as "don't care" bits.) This can be especially useful where part of the IPv6 address consists of an embedded IPv4 address, and matching needs to happen only on the embedded IPv4 address. The encoded pattern contains enough octets for the bits used in matching (length minus offset bits).

これにより、一致する宛先プレフィックスが定義されています。オフセットは、アドレスの最初のNビットをスキップするのに必要なIPv6アドレスの一部に柔軟なマッチングを可能にするように定義されています。(スキップされたこれらのビットはしばしば「医療」ビットとして示されています。)IPv6アドレスの一部が組み込みIPv4アドレスで構成されており、一致するIPv4アドレスでのみマッチングが必要です。符号化パターンには、マッチング(長さマイナスオフセットビット)に使用されるビットに十分なオクテットが含まれています。

length: This indicates the N-th most significant bit in the address where bitwise pattern matching stops.

長さ:これは、ビット単位のパターンマッチングが停止するアドレス内のn番目の最上位ビットを示します。

offset: This indicates the number of most significant address bits to skip before bitwise pattern matching starts.

オフセット:これは、ビット単位のパターンマッチングが開始される前にスキップする最上位アドレスビットの数を示します。

pattern: This contains the matching pattern. The length of the pattern is defined by the number of bits needed for pattern matching (length minus offset).

パターン:これにはマッチングパターンが含まれています。パターンの長さは、パターンマッチングに必要なビット数(長さマイナスオフセット)によって定義されます。

padding: This contains the minimum number of bits required to pad the component to an octet boundary. Padding bits MUST be 0 on encoding and MUST be ignored on decoding.

PDDING:これには、コンポーネントをオクテット境界に埋めるのに必要な最小ビット数が含まれています。パディングビットはエンコード時に0でなければならず、デコード時に無視されなければなりません。

If length = 0 and offset = 0, this component matches every address; otherwise, length MUST be in the range offset < length < 129 or the component is malformed.

length = 0とオフセット= 0の場合、このコンポーネントはすべてのアドレスと一致します。それ以外の場合、長さはオフセット<長さ<129またはコンポーネントが不正な形式である必要があります。

Note: This Flow Specification component can be represented by the notation ipv6address/length if offset is 0 or ipv6address/offset-length. The ipv6address in this notation is the textual IPv6 representation of the pattern shifted to the right by the number of offset bits. See also Section 3.8.

注:このフロー仕様コンポーネントは、オフセットが0またはIPv6Address / offset-lengthの場合、表記のIPv6Address / Lengthで表すことができます。この表記のIPv6addressは、オフセットビット数によって右にシフトされたパターンのテキストIPv6表現です。セクション3.8も参照してください。

3.2. Type 2 - Source IPv6 Prefix
3.2. タイプ2 - ソースIPv6プレフィックス

Encoding: <type (1 octet), length (1 octet), offset (1 octet), pattern (variable), padding (variable) >

エンコード:<タイプ(1オクテット)、長さ(1オクテット)、オフセット(1オクテット)、パターン(変数)、パディング(変数)>

This defines the source prefix to match. The length, offset, pattern, and padding are the same as in Section 3.1.

これにより、一致するソースプレフィックスが定義されています。長さ、オフセット、パターン、およびパディングはセクション3.1と同じです。

3.3. Type 3 - Upper-Layer Protocol
3.3. タイプ3 - 上位プロトコル
   Encoding:  <type (1 octet), [numeric_op, value]+>
        

This contains a list of {numeric_op, value} pairs that are used to match the first Next Header value octet in IPv6 packets that is not an extension header and thus indicates that the next item in the packet is the corresponding upper-layer header (see Section 4 of [RFC8200]).

これには、拡張ヘッダーではないIPv6パケット内の最初の次のヘッダー値オクテットと一致する{numeric_op、value}ペアのリストが含まれており、パケット内の次の項目が対応する上位層のヘッダーであることを示します(参照)。[RFC8200]のセクション4)。

This component uses the Numeric Operator (numeric_op) described in Section 4.2.1.1 of [RFC8955]. Type 3 component values SHOULD be encoded as a single octet (numeric_op len=00).

このコンポーネントは[RFC8955]の4.2.1.1項で説明されている数値演算子(Numeric_op)を使用します。タイプ3のコンポーネント値は、単一のオクテット(Numeric_op Len = 00)としてエンコードされます。

Note: While IPv6 allows for more than one Next Header field in the packet, the main goal of the Type 3 Flow Specification component is to match on the first upper-layer IP protocol value. Therefore, the definition is limited to match only on this specific Next Header field in the packet.

注:IPv6はパケット内の2つ以上の次のヘッダーフィールドを可能にしますが、タイプ3のフロー仕様コンポーネントの主な目標は、最初の上位層IPプロトコル値と一致することです。したがって、定義はパケット内のこの特定の次のヘッダーフィールドに対してのみ一致するように制限されています。

3.4. Type 7 - ICMPv6 Type
3.4. Type 7 - ICMPv6型
   Encoding:  <type (1 octet), [numeric_op, value]+>
        

This defines a list of {numeric_op, value} pairs used to match the Type field of an ICMPv6 packet (see also Section 2.1 of [RFC4443]).

これは、ICMPv6パケットの型フィールドと一致する{numeric_op、value}ペアのリストを定義します([RFC4443]のセクション2.1も参照)。

This component uses the Numeric Operator (numeric_op) described in Section 4.2.1.1 of [RFC8955]. Type 7 component values SHOULD be encoded as a single octet (numeric_op len=00).

このコンポーネントは[RFC8955]の4.2.1.1項で説明されている数値演算子(Numeric_op)を使用します。タイプ7のコンポーネント値は、単一のオクテット(Numeric_op Len = 00)としてエンコードされます。

In case of the presence of the ICMPv6 type component, only ICMPv6 packets can match the entire Flow Specification. The ICMPv6 type component, if present, never matches when the packet's upper-layer IP protocol value is not 58 (ICMPv6), if the packet is fragmented and this is not the first fragment, or if the system is unable to locate the transport header. Different implementations may or may not be able to decode the transport header.

ICMPv6タイプのコンポーネントが存在する場合、ICMPv6パケットのみがフロー仕様全体に合わせることができます。ICMPv6タイプのコンポーネントが存在する場合、パケットの上位層のIPプロトコル値が58(ICMPv6)ではなく、パケットがフラグメント化されていて最初にフラグメントではない場合、またはシステムがトランスポートヘッダーを見つけることができない場合は一致しません。。異なる実装形態は、トランスポートヘッダを復号することができない場合があります。

3.5. Type 8 - ICMPv6 Code
3.5. タイプ8 - ICMPv6コード
   Encoding:  <type (1 octet), [numeric_op, value]+>
        

This defines a list of {numeric_op, value} pairs used to match the code field of an ICMPv6 packet (see also Section 2.1 of [RFC4443]).

これは、ICMPv6パケットのコードフィールドと一致する{numeric_op、value}ペアのリストを定義します([RFC4443]のセクション2.1も参照)。

This component uses the Numeric Operator (numeric_op) described in Section 4.2.1.1 of [RFC8955]. Type 8 component values SHOULD be encoded as a single octet (numeric_op len=00).

このコンポーネントは[RFC8955]の4.2.1.1項で説明されている数値演算子(Numeric_op)を使用します。タイプ8のコンポーネント値は、単一のオクテットとしてエンコードされます(numeric_op len = 00)。

In case of the presence of the ICMPv6 code component, only ICMPv6 packets can match the entire Flow Specification. The ICMPv6 code component, if present, never matches when the packet's upper-layer IP protocol value is not 58 (ICMPv6), if the packet is fragmented and this is not the first fragment, or if the system is unable to locate the transport header. Different implementations may or may not be able to decode the transport header.

ICMPv6コードコンポーネントが存在する場合、ICMPv6パケットのみがフロー仕様全体に一致することができます。ICMPv6コードコンポーネントが存在する場合、パケットの上位層のIPプロトコル値が58(ICMPv6)のときに一致することはなく、パケットがフラグメント化されていて最初のフラグメントではない場合、またはシステムがトランスポートヘッダーを見つけることができない場合。異なる実装形態は、トランスポートヘッダを復号することができない場合があります。

3.6. Type 12 - Fragment
3.6. タイプ12 - フラグメント
   Encoding:  <type (1 octet), [bitmask_op, bitmask]+>
        

This defines a list of {bitmask_op, bitmask} pairs used to match specific IP fragments.

これは、特定のIPフラグメントを一致させるために使用される{bitmask_op、bitmask}ペアのリストを定義します。

This component uses the Bitmask Operator (bitmask_op) described in Section 4.2.1.2 of [RFC8955]. The Type 12 component bitmask MUST be encoded as a single octet bitmask (bitmask_op len=00).

このコンポーネントは[RFC8955]のセクション4.2.1.2で説明されているビットマスク演算子(bitmask_op)を使用します。Type 12コンポーネントビットマスクは、単一のオクテットビットマスク(bitmask_op len = 00)としてエンコードする必要があります。

                      0   1   2   3   4   5   6   7
                    +---+---+---+---+---+---+---+---+
                    | 0 | 0 | 0 | 0 |LF |FF |IsF| 0 |
                    +---+---+---+---+---+---+---+---+
        

Figure 1: Fragment Bitmask Operand

図1:フラグメントビットマスクオペランド

Bitmask values:

ビットマスク値:

IsF: Is a fragment other than the first -- match if IPv6 Fragment Header (Section 4.5 of [RFC8200]) Fragment Offset is not 0

ISF:IPv6フラグメントヘッダー(RFC8200]のセクション4.5)フラグメントオフセットが0でない場合、最初の一致以外のフラグメントです。

FF: First fragment -- match if IPv6 Fragment Header (Section 4.5 of [RFC8200]) Fragment Offset is 0 AND M flag is 1

ff:最初のフラグメント - 一致するIPv6フラグメントヘッダ(RFC8200のセクション4.5)フラグメントオフセットが0、Mフラグが1の場合

LF: Last fragment -- match if IPv6 Fragment Header (Section 4.5 of [RFC8200]) Fragment Offset is not 0 AND M flag is 0

LF:最後のフラグメント - 一致するIPv6フラグメントヘッダー([RFC8200]のセクション4.5)フラグメントオフセットが0、Mフラグが0の場合

0: MUST be set to 0 on NLRI encoding and MUST be ignored during decoding

0:NLRIエンコーディングで0に設定する必要があり、デコード中に無視する必要があります。

3.7. Type 13 - Flow Label (new)
3.7. タイプ13 - フローラベル(新規)
   Encoding:  <type (1 octet), [numeric_op, value]+>
        

This contains a list of {numeric_op, value} pairs that are used to match the 20-bit Flow Label IPv6 header field (Section 3 of [RFC8200]).

これには、20ビットフローラベルのIPv6ヘッダーフィールドと一致するために使用される{numeric_op、value}ペアのリストが含まれています([RFC8200]のセクション3)。

This component uses the Numeric Operator (numeric_op) described in Section 4.2.1.1 of [RFC8955]. Type 13 component values SHOULD be encoded as 4-octet quantities (numeric_op len=10).

このコンポーネントは[RFC8955]の4.2.1.1項で説明されている数値演算子(Numeric_op)を使用します。タイプ13のコンポーネント値は、4オクテット数量としてエンコードされます(numeric_op len = 10)。

3.8. Encoding Examples
3.8. 符号化例
3.8.1. Example 1
3.8.1. 例1

The following example demonstrates the prefix encoding for packets from ::1234:5678:9a00:0/64-104 to 2001:db8::/32 and upper-layer protocol tcp.

次の例では、:: 1234:5678:9A00:0 / 64-104~2001:DB8 :: / 32および上位レイヤプロトコルTCPからのプレフィックスエンコーディングを示しています。

   +======+======================+=========================+==========+
   | len  | destination          | source                  | ul-proto |
   +======+======================+=========================+==========+
   | 0x12 | 01 20 00 20 01 0d bb | 02 68 40 12 34 56 78 9a | 03 81 06 |
   +------+----------------------+-------------------------+----------+
        

Table 1

表1

Decoded:

復号化:

   +=======+============+=================================+
   | Value |            |                                 |
   +=======+============+=================================+
   | 0x12  | length     | 18 octets (if len<240, 1 octet) |
   +-------+------------+---------------------------------+
   | 0x01  | type       | Type 1 - Dest. IPv6 Prefix      |
   +-------+------------+---------------------------------+
   | 0x20  | length     | 32 bits                         |
   +-------+------------+---------------------------------+
   | 0x00  | offset     | 0 bits                          |
   +-------+------------+---------------------------------+
   | 0x20  | pattern    |                                 |
   +-------+------------+---------------------------------+
   | 0x01  | pattern    |                                 |
   +-------+------------+---------------------------------+
   | 0x0d  | pattern    |                                 |
   +-------+------------+---------------------------------+
   | 0xb8  | pattern    | (no padding needed)             |
   +-------+------------+---------------------------------+
   | 0x02  | type       | Type 2 - Source IPv6 Prefix     |
   +-------+------------+---------------------------------+
   | 0x68  | length     | 104 bits                        |
   +-------+------------+---------------------------------+
   | 0x40  | offset     | 64 bits                         |
   +-------+------------+---------------------------------+
   | 0x12  | pattern    |                                 |
   +-------+------------+---------------------------------+
   | 0x34  | pattern    |                                 |
   +-------+------------+---------------------------------+
   | 0x56  | pattern    |                                 |
   +-------+------------+---------------------------------+
   | 0x78  | pattern    |                                 |
   +-------+------------+---------------------------------+
   | 0x9a  | pattern    | (no padding needed)             |
   +-------+------------+---------------------------------+
   | 0x03  | type       | Type 3 - Upper-Layer Protocol   |
   +-------+------------+---------------------------------+
   | 0x81  | numeric_op | end-of-list, value size=1, ==   |
   +-------+------------+---------------------------------+
   | 0x06  | value      | 06                              |
   +-------+------------+---------------------------------+
        

Table 2

表2.

This constitutes an NLRI with an NLRI length of 18 octets.

これはNLRI長が18オクテットのNLRIを構成する。

Padding is not needed either for the destination prefix pattern (length - offset = 32 bits) or for the source prefix pattern (length - offset = 40 bits), as both patterns end on an octet boundary.

両方のパターンがオクテットの境界で終わるので、宛先プレフィックスパターン(長さ - オフセット= 32ビット)またはソースプレフィックスパターン(長さ - オフセット= 40ビット)の場合は、パディングは必要ありません。

3.8.2. Example 2
3.8.2. 例2.

The following example demonstrates the prefix encoding for all packets from ::1234:5678:9a00:0/65-104 to 2001:db8::/32.

次の例では、:: 1234:5678:9A00:0 / 65-104~2001:DB8 :: / 32からのすべてのパケットのプレフィックスエンコーディングを示しています。

   +========+======================+=========================+
   | length | destination          | source                  |
   +========+======================+=========================+
   | 0x0f   | 01 20 00 20 01 0d b8 | 02 68 41 24 68 ac f1 34 |
   +--------+----------------------+-------------------------+
        

Table 3

表3.

Decoded:

復号化:

   +=======+=============+=================================+
   | Value |             |                                 |
   +=======+=============+=================================+
   | 0x0f  | length      | 15 octets (if len<240, 1 octet) |
   +-------+-------------+---------------------------------+
   | 0x01  | type        | Type 1 - Dest. IPv6 Prefix      |
   +-------+-------------+---------------------------------+
   | 0x20  | length      | 32 bits                         |
   +-------+-------------+---------------------------------+
   | 0x00  | offset      | 0 bits                          |
   +-------+-------------+---------------------------------+
   | 0x20  | pattern     |                                 |
   +-------+-------------+---------------------------------+
   | 0x01  | pattern     |                                 |
   +-------+-------------+---------------------------------+
   | 0x0d  | pattern     |                                 |
   +-------+-------------+---------------------------------+
   | 0xb8  | pattern     | (no padding needed)             |
   +-------+-------------+---------------------------------+
   | 0x02  | type        | Type 2 - Source IPv6 Prefix     |
   +-------+-------------+---------------------------------+
   | 0x68  | length      | 104 bits                        |
   +-------+-------------+---------------------------------+
   | 0x41  | offset      | 65 bits                         |
   +-------+-------------+---------------------------------+
   | 0x24  | pattern     |                                 |
   +-------+-------------+---------------------------------+
   | 0x68  | pattern     |                                 |
   +-------+-------------+---------------------------------+
   | 0xac  | pattern     |                                 |
   +-------+-------------+---------------------------------+
   | 0xf1  | pattern     |                                 |
   +-------+-------------+---------------------------------+
   | 0x34  | pattern/pad | (contains 1 bit of padding)     |
   +-------+-------------+---------------------------------+
        

Table 4

表4.

This constitutes an NLRI with an NLRI length of 15 octets.

これはNLRI長さ15オクテットのNLRIを構成する。

The source prefix pattern is 104 - 65 = 39 bits in length. After the pattern, one bit of padding needs to be added so that the component ends on an octet boundary. However, only the first 39 bits are actually used for bitwise pattern matching, starting with a 65-bit offset from the topmost bit of the address.

ソースプレフィックスパターンは104 - 65 = 39ビットの長さです。パターンの後、コンポーネントがオクテット境界で終わるように1ビットのパディングを追加する必要があります。ただし、アドレスの最上位ビットから65ビットのオフセットから始めて、実際にはビットごとのパターンマッチングに最初の39ビットのみが使用されます。

4. Ordering of Flow Specifications
4. フロー仕様の注文

The definition for the order of traffic filtering rules from Section 5.1 of [RFC8955] is reused with new consideration for the IPv6 prefix offset. As long as the offsets are equal, the comparison is the same, retaining longest-prefix-match semantics. If the offsets are not equal, the lowest offset has precedence, as this Flow Specification matches the most significant bit.

[RFC8955]のセクション5.1からのトラフィックフィルタリングルールの順序の定義は、IPv6プレフィックスオフセットのための新しい検討を利用しています。オフセットが等しい限り、比較は同じで、最長プレフィックス一致セマンティクスを保持します。オフセットが等しくない場合、このフロー仕様は最上位ビットと一致するため、最低のオフセットは優先されます。

The code in Appendix A shows a Python3 implementation of the resulting comparison algorithm. The full code was tested with Python 3.7.2 and can be obtained at <https://github.com/stoffi92/draft-ietf-idr-flow-spec-v6/tree/master/flowspec-cmp>.

付録Aのコードは、結果として得られる比較アルゴリズムのPython3実装を示しています。フルコードはPython 3.7.2でテストされ、<https://github.com/stoffi92/draft-ietf-idr-flow-pec-v6/tree/master/flowspec-cmp>で入手できます。

5. Validation Procedure
5. 検証手順

The validation procedure is the same as specified in Section 6 of [RFC8955] with the exception that item a) of the validation procedure should now read as follows:

検証手順は、検証手順の項目a)を次のように読み取るべきであることを除いて、[RFC8955]のセクション6のセクション6で指定されているものと同じです。

| a) A destination prefix component with offset=0 is embedded in | the Flow Specification

| ..a)オフセット= 0の宛先プレフィックスコンポーネントが埋め込まれています。フロー仕様

6. IPv6 Traffic Filtering Action Changes
6. IPv6トラフィックフィルタリングアクションの変更

Traffic Filtering Actions from Section 7 of [RFC8955] can also be applied to IPv6 Flow Specifications. To allow an IPv6-Address-Specific Route-Target, a new Traffic Filtering Action IPv6-Address-Specific Extended Community is specified in Section 6.1 below.

[RFC8955]のセクション7のトラフィックフィルタリングアクションもIPv6フロー仕様に適用できます。IPv6アドレス固有のルートターゲットを許可するには、新しいトラフィックフィルタリングアクションIPv6アドレス固有の拡張コミュニティが以下のセクション6.1で指定されています。

6.1. Redirect IPv6 (rt-redirect-ipv6) Type 0x000d
6.1. リダイレクトIPv6(RT-Redirect-IPv6)タイプ0x000D

The redirect IPv6-Address-Specific Extended Community allows the traffic to be redirected to a VRF routing instance that lists the specified IPv6-Address-Specific Route-Target in its import policy. If several local instances match this criteria, the choice between them is a local matter (for example, the instance with the lowest Route Distinguisher value can be elected).

リダイレクトIPv6-Address固有の拡張コミュニティは、トラフィックをインポートポリシーに指定されたIPv6-address固有のルートターゲットをリストするVRFルーティングインスタンスにリダイレクトできます。いくつかのローカルインスタンスがこの基準と一致する場合、それらの間の選択は地域的な問題です(たとえば、経路が最も低いインスタンスは選択されます)。

This IPv6-Address-Specific Extended Community uses the same encoding as the IPv6-Address-Specific Route-Target Extended Community (Section 2 of [RFC5701]) with the Type value always 0x000d.

このIPv6アドレス固有の拡張コミュニティは、タイプ値が常に0x000Dで、IPv6アドレス固有のルート対象拡張コミュニティ([RFC5701]のセクション2)と同じエンコーディングを使用します。

The Local Administrator subfield contains a number from a numbering space that is administered by the organization to which the IP address carried in the Global Administrator subfield has been assigned by an appropriate authority.

ローカル管理者サブフィールドには、Global Administrator Subfieldで実行されているIPアドレスが適切な権限によって割り当てられている組織によって管理されている番号付けスペースからの数値が含まれています。

Interferes with: All BGP Flow Specification redirect Traffic Filtering Actions (with itself and those specified in Section 7.4 of [RFC8955]).

干渉:すべてのBGPフロー仕様は、トラフィックフィルタリングアクションをリダイレクトします(それ自体、[RFC8955]のセクション7.4で指定されたもの)。

7. Security Considerations
7. セキュリティに関する考慮事項

This document extends the functionality in [RFC8955] to be applicable to IPv6 data packets. The same security considerations from [RFC8955] now also apply to IPv6 networks.

この文書は[RFC8955]の機能をIPv6データパケットに適用できるように拡張します。[RFC8955]からの同じセキュリティ上の考慮事項は、IPv6ネットワークにも適用されます。

[RFC7112] describes the impact of oversized IPv6 header chains when trying to match on the transport header; Section 4.5 of [RFC8200] also requires that the first fragment must include the upper-layer header, but there could be wrongly formatted packets not respecting [RFC8200]. IPv6 Flow Specification component Type 3 (Section 3.3) will not be enforced for those illegal packets. Moreover, there are hardware limitations in several routers (Section 1 of [RFC8883]) that may make it impossible to enforce a policy signaled by a Type 3 Flow Specification component or Flow Specification components that match on upper-layer properties of the packet.

[RFC7112]は、トランスポートヘッダーに一致しようとしたときの特大IPv6ヘッダーチェーンの影響を説明しています。[RFC8200]のセクション4.5では、最初のフラグメントに上位レイヤーヘッダを含める必要があるが、誤ってフォーマットされたパケットが誤ってフォーマットされている場合があります[RFC8200]。IPv6フロー仕様コンポーネントタイプ3(セクション3.3)は、それらの不正パケットに対して強制されません。さらに、タイプ3のフロー仕様コンポーネントまたはパケットの上位層プロパティに一致するフロー仕様コンポーネントによってシグナリングされたポリシーを強制することを不可能にする可能性がある、いくつかのルーター(RFC8883]のセクション1)にハードウェアの制限があります。

8. IANA Considerations
8. IANAの考慮事項

This section complies with [RFC7153].

このセクションは[RFC7153]に準拠しています。

8.1. Flow Spec IPv6 Component Types
8.1. フロー仕様IPv6コンポーネントタイプ

IANA has created and maintains a registry entitled "Flow Spec Component Types". IANA has added this document as a reference for that registry. Furthermore, the registry has been updated to also contain the IPv6 Flow Specification Component Types as described below. The registration procedure remains unchanged.

IANAは「Flow Spec Component Types」と題されたレジストリを作成して管理しています。この文書をそのレジストリの参照として追加しました。さらに、レジストリは、以下に説明するようにIPv6フロー仕様コンポーネントタイプも含まれるように更新されています。登録手順は変更されていません。

8.1.1. Registry Template
8.1.1. レジストリテンプレート

Type Value: contains the assigned Flow Specification component type value

タイプ値:割り当てられたフロー仕様コンポーネントタイプの値が含まれています

IPv4 Name: contains the associated IPv4 Flow Specification component name as specified in [RFC8955]

IPv4名:[RFC8955]で指定されているように関連するIPv4フロー仕様コンポーネント名を含みます。

IPv6 Name: contains the associated IPv6 Flow Specification component name as specified in this document

IPv6名:このドキュメントで指定されている関連IPv6 Flow仕様コンポーネント名を含みます

Reference: contains references to the specifications

参照:仕様への参照が含まれています

8.1.2. Registry Contents
8.1.2. レジストリ内容

Type Value: 0 IPv4 Name: Reserved IPv6 Name: Reserved Reference: [RFC8955], RFC 8956

タイプ値:0 IPv4名:予約IPv6名:予約リファレンス:[RFC8955]、RFC 8956

Type Value: 1 IPv4 Name: Destination Prefix IPv6 Name: Destination IPv6 Prefix Reference: [RFC8955], RFC 8956

タイプ値:1 IPv4名:宛先プレフィックスIPv6名:宛先IPv6プレフィックス参照:[RFC8955]、RFC 8956

Type Value: 2 IPv4 Name: Source Prefix IPv6 Name: Source IPv6 Prefix Reference: [RFC8955], RFC 8956

タイプ値:2 IPv4名:ソースプレフィックスIPv6名:ソースIPv6プレフィックス参照:[RFC8955]、RFC 8956

Type Value: 3 IPv4 Name: IP Protocol IPv6 Name: Upper-Layer Protocol Reference: [RFC8955], RFC 8956

タイプ値:3 IPv4名:IPプロトコルIPv6の名前:上位層プロトコル参照:[RFC8955]、RFC 8956

Type Value: 4 IPv4 Name: Port IPv6 Name: Port Reference: [RFC8955], RFC 8956

タイプ値:4 IPv4名:ポートIPv6名:ポートリファレンス:[RFC8955]、RFC 8956

Type Value: 5 IPv4 Name: Destination Port IPv6 Name: Destination Port Reference: [RFC8955], RFC 8956

タイプ値:5 IPv4名:宛先ポートIPv6名:宛先ポートリファレンス:[RFC8955]、RFC 8956

Type Value: 6 IPv4 Name: Source Port IPv6 Name: Source Port Reference: [RFC8955], RFC 8956

タイプ値:6 IPv4名:送信元ポートIPv6名:ソースポートリファレンス:[RFC8955]、RFC 8956

Type Value: 7 IPv4 Name: ICMP Type IPv6 Name: ICMPv6 Type Reference: [RFC8955], RFC 8956

タイプ値:7 IPv4名:ICMPタイプIPv6名:ICMPv6タイプリファレンス:[RFC8955]、RFC 8956

Type Value: 8 IPv4 Name: ICMP Code IPv6 Name: ICMPv6 Code Reference: [RFC8955], RFC 8956

タイプ値:8 IPv4名:ICMPコードIPv6名:ICMPv6コード参照:[RFC8955]、RFC 8956

Type Value: 9 IPv4 Name: TCP Flags IPv6 Name: TCP Flags Reference: [RFC8955], RFC 8956

タイプ値:9 IPv4名:TCP Flags IPv6名:TCP Flagsリファレンス:[RFC8955]、RFC 8956

Type Value: 10 IPv4 Name: Packet Length IPv6 Name: Packet Length Reference: [RFC8955], RFC 8956

タイプ値:10 IPv4名:パケット長IPv6名:パケット長リファレンス:[RFC8955]、RFC 8956

Type Value: 11 IPv4 Name: DSCP IPv6 Name: DSCP Reference: [RFC8955], RFC 8956

タイプ値:11 IPv4名:DSCP IPv6名:DSCPリファレンス:[RFC8955]、RFC 8956

Type Value: 12 IPv4 Name: Fragment IPv6 Name: Fragment Reference: [RFC8955], RFC 8956

タイプ値:12 IPv4名:フラグメントIPv6名:フラグメントリファレンス:[RFC8955]、RFC 8956

Type Value: 13 IPv4 Name: Unassigned IPv6 Name: Flow Label Reference: RFC 8956

タイプ値:13 IPv4名:未割り当てIPv6名:フローラベルリファレンス:RFC 8956

Type Value: 14-254 IPv4 Name: Unassigned IPv6 Name: Unassigned

タイプ値:14-254 IPv4名:未割り当てIPv6名:未割り当て

Type Value: 255 IPv4 Name: Reserved IPv6 Name: Reserved Reference: [RFC8955], RFC 8956

タイプ値:255 IPv4名:予約IPv6名:予約参照:[RFC8955]、RFC 8956

8.2. IPv6-Address-Specific Extended Community Flow Spec IPv6 Actions
8.2. IPv6アドレス固有の拡張コミュニティフロー仕様IPv6アクション

IANA maintains a registry entitled "Transitive IPv6-Address-Specific Extended Community Types". For the purpose of this work, IANA has assigned a new value:

IANAは、「推移的IPv6アドレス固有の拡張コミュニティタイプ」と題されたレジストリを管理しています。この作品の目的のために、IANAは新しい値を割り当てました。

      +============+===================================+===========+
      | Type Value | Name                              | Reference |
      +============+===================================+===========+
      | 0x000d     | Flow spec rt-redirect-ipv6 format | RFC 8956  |
      +------------+-----------------------------------+-----------+
        

Table 5: Transitive IPv6-Address-Specific Extended Community Types Registry

表5:推移的IPv6アドレス固有の拡張コミュニティタイプレジストリ

9. Normative References
9. 引用文献

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC2119] BRADNER、S、「RFCSで使用するためのキーワード」、BCP 14、RFC 2119、DOI 10.17487 / RFC2119、1997年3月、<https://www.rfc-editor.org/info/RFC2119>。

[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A Border Gateway Protocol 4 (BGP-4)", RFC 4271, DOI 10.17487/RFC4271, January 2006, <https://www.rfc-editor.org/info/rfc4271>.

[RFC4271]、y、ed。、Li、T.、Ed。、S. Hares、Ed。、「ボーダーゲートウェイプロトコル4(BGP-4)」、RFC 4271、DOI 10.17487 / RFC4271、2006年1月<https://www.rfc-editor.org/info/rfc4271>。

[RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification", STD 89, RFC 4443, DOI 10.17487/RFC4443, March 2006, <https://www.rfc-editor.org/info/rfc4443>.

[RFC4443] Conta、A.、Theering、S.およびM.Gupta、Internet Protocol Version 6(IPv6)仕様のICMPv6(ICMPv6)、STD 89、RFC 4443、DOI 10.17487 /RFC4443、2006年3月、<https://www.rfc-editor.org/info/rfc4443>。

[RFC4760] Bates, T., Chandra, R., Katz, D., and Y. Rekhter, "Multiprotocol Extensions for BGP-4", RFC 4760, DOI 10.17487/RFC4760, January 2007, <https://www.rfc-editor.org/info/rfc4760>.

[RFC4760]ベイツ、T.、Chandra、R.、Katz、D.、およびY.Rekhter、「BGP-4」、RFC 4760、DOI 10.17487 / RFC4760、2007年1月、<https:// www。rfc-editor.org/info/rfc4760>。

[RFC5701] Rekhter, Y., "IPv6 Address Specific BGP Extended Community Attribute", RFC 5701, DOI 10.17487/RFC5701, November 2009, <https://www.rfc-editor.org/info/rfc5701>.

[RFC5701] REKHTER、Y。、「IPV6アドレス固有のBGP拡張コミュニティ属性」、RFC 5701、DOI 10.17487 / RFC5701、2009年11月、<https://www.rfc-editor.org/info/rfc5701>。

[RFC7112] Gont, F., Manral, V., and R. Bonica, "Implications of Oversized IPv6 Header Chains", RFC 7112, DOI 10.17487/RFC7112, January 2014, <https://www.rfc-editor.org/info/rfc7112>.

[RFC7112] Gont、F.、Manral、V.およびR. Bonica、「特大IPv6ヘッダーチェーンの意味」、RFC 7112、DOI 10.17487 / RFC7112、2014年1月、<https://www.rfc-editor.org/ info / rfc7112>。

[RFC7153] Rosen, E. and Y. Rekhter, "IANA Registries for BGP Extended Communities", RFC 7153, DOI 10.17487/RFC7153, March 2014, <https://www.rfc-editor.org/info/rfc7153>.

[RFC7153] Rosen、E.およびY.Rekhter、RFC 7153、DOI 10.17487 / RFC7153、2014年3月、<https://www.rfc-editor.org/info/rfc7153>。

[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8174] Leiba、B、「RFC 2119キーワードの大文字の曖昧さ」、BCP 14、RFC 8174、DOI 10.17487 / RFC8174、2017年5月、<https://www.rfc-editor.org/info/RFC8174>。

[RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", STD 86, RFC 8200, DOI 10.17487/RFC8200, July 2017, <https://www.rfc-editor.org/info/rfc8200>.

[RFC8200] The'th、S.およびR.hinden、「インターネットプロトコル、バージョン6(IPv6)仕様」、STD 86、RFC 8200、DOI 10.17487 / RFC8200、2017年7月、<https://www.rfc-editor.org/ info / rfc8200>。

[RFC8883] Herbert, T., "ICMPv6 Errors for Discarding Packets Due to Processing Limits", RFC 8883, DOI 10.17487/RFC8883, September 2020, <https://www.rfc-editor.org/info/rfc8883>.

[RFC8883] Herbert、T.、「処理限界によるパケットを破棄するためのICMPv6エラー」、RFC 8883、DOI 10.17487 / RFC8883、2020年9月、<https://www.rfc-editor.org/info/rfc8883>。

[RFC8955] Loibl, C., Hares, S., Raszuk, R., McPherson, D., and M. Bacher, "Dissemination of Flow Specification Rules", RFC 8955, DOI 10.17487/RFC8955, December 2020, <https://www.rfc-editor.org/info/rfc8955>.

[RFC8955] LOIBL、C.、HARES、S.、Raszuk、R.、Mcpherson、D.、およびM. Bacher、「フロー仕様規則の普及」、RFC 8955、DOI 10.17487 / RFC8955、2020年12月2020日、<HTTPS://www.rfc-editor.org/info/rfc8955>。

Appendix A. Example Python Code: flow_rule_cmp_v6

付録A. Pythonコードの例:flow_rule_cmp_v6

<CODE BEGINS> """ Copyright (c) 2020 IETF Trust and the persons identified as authors of the code. All rights reserved.

<コードが始まります> "" "" "" ""著作権(c)2020 IETFの信頼とコードの著者として識別された人。すべての権利予約。

Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). """

修正の有無にかかわらず、ソースおよびバイナリ形式での再配布と使用は、IETF文書に関連するIETF信託の法的規定のセクション4.Cに記載されている単純化されたBSDライセンスに従い、身に付けられたライセンス条項に従って許可されています(https://trustee.ietf.org/License-info)。"" ""

import itertools import collections import ipaddress

IterToolsのインポートコレクションのインポートipaddress.

EQUAL = 0 A_HAS_PRECEDENCE = 1 B_HAS_PRECEDENCE = 2 IP_DESTINATION = 1 IP_SOURCE = 2

等= 0 A_HAS_PRECENCENE = 1 B_HAS_PRECENCENE = 2 IP_DESTINATION = 1 IP_SOURCE = 2

FS_component = collections.namedtuple('FS_component', 'component_type value')

fs_component = collections.NamedTuple( 'fs_component'、 'component_type value')

   class FS_IPv6_prefix_component:
       def __init__(self, prefix, offset=0,
                    component_type=IP_DESTINATION):
           self.offset = offset
           self.component_type = component_type
           # make sure if offset != 0 that none of the
           # first offset bits are set in the prefix
           self.value = prefix
           if offset != 0:
               i = ipaddress.IPv6Interface(
                   (self.value.network_address, offset))
               if i.network.network_address != \
                   ipaddress.ip_address('0::0'):
                   raise ValueError('Bits set in the offset')
        

class FS_nlri(object): """ FS_nlri class implementation that allows sorting.

クラスFS_NLRI(Object): "" ""ソートを可能にするFS_NLRIクラスの実装。

By calling .sort() on an array of FS_nlri objects these will be sorted according to the flow_rule_cmp algorithm.

fs_nlriオブジェクトの配列で.sort()を呼び出すことによって、これらはflow_rule_cmpアルゴリズムに従ってソートされます。

       Example:
       nlri = [ FS_nlri(components=[
                FS_component(component_type=4,
                             value=bytearray([0,1,2,3,4,5,6])),
                ]),
                FS_nlri(components=[
                FS_component(component_type=5,
                             value=bytearray([0,1,2,3,4,5,6])),
                FS_component(component_type=6,
                             value=bytearray([0,1,2,3,4,5,6])),
                ]),
              ]
       nlri.sort() # sorts the array according to the algorithm
       """
       def __init__(self, components = None):
           """
           components: list of type FS_component
           """
           self.components = components
        
       def __lt__(self, other):
           # use the below algorithm for sorting
           result = flow_rule_cmp_v6(self, other)
           if result == B_HAS_PRECEDENCE:
               return True
           else:
               return False
        
   def flow_rule_cmp_v6(a, b):
       """
       Implementation of the flowspec sorting algorithm in
       RFC 8956.
       """
       for comp_a, comp_b in itertools.zip_longest(a.components,
                                              b.components):
           # If a component type does not exist in one rule
           # this rule has lower precedence
           if not comp_a:
               return B_HAS_PRECEDENCE
           if not comp_b:
               return A_HAS_PRECEDENCE
           # Higher precedence for lower component type
           if comp_a.component_type < comp_b.component_type:
               return A_HAS_PRECEDENCE
           if comp_a.component_type > comp_b.component_type:
               return B_HAS_PRECEDENCE
           # component types are equal -> type-specific comparison
           if comp_a.component_type in (IP_DESTINATION, IP_SOURCE):
               if comp_a.offset < comp_b.offset:
                   return A_HAS_PRECEDENCE
               if comp_a.offset > comp_b.offset:
                   return B_HAS_PRECEDENCE
               # both components have the same offset
               # assuming comp_a.value, comp_b.value of type
               # ipaddress.IPv6Network
               # and the offset bits are reset to 0 (since they are
               # not represented in the NLRI)
               if comp_a.value.overlaps(comp_b.value):
                   # longest prefixlen has precedence
                   if comp_a.value.prefixlen > \
                       comp_b.value.prefixlen:
                       return A_HAS_PRECEDENCE
                   if comp_a.value.prefixlen < \
                       comp_b.value.prefixlen:
                       return B_HAS_PRECEDENCE
                   # components equal -> continue with next
                   # component
               elif comp_a.value > comp_b.value:
                   return B_HAS_PRECEDENCE
               elif comp_a.value < comp_b.value:
                   return A_HAS_PRECEDENCE
           else:
               # assuming comp_a.value, comp_b.value of type
               # bytearray
               if len(comp_a.value) == len(comp_b.value):
                   if comp_a.value > comp_b.value:
                       return B_HAS_PRECEDENCE
                   if comp_a.value < comp_b.value:
                       return A_HAS_PRECEDENCE
                   # components equal -> continue with next
                   # component
               else:
                   common = min(len(comp_a.value),
                                len(comp_b.value))
                   if comp_a.value[:common] > \
                       comp_b.value[:common]:
                       return B_HAS_PRECEDENCE
                   elif comp_a.value[:common] < \
                         comp_b.value[:common]:
                       return A_HAS_PRECEDENCE
                   # the first common bytes match
                   elif len(comp_a.value) > len(comp_b.value):
                       return A_HAS_PRECEDENCE
                   else:
                       return B_HAS_PRECEDENCE
       return EQUAL
   <CODE ENDS>
        

Acknowledgments

謝辞

The authors would like to thank Pedro Marques, Hannes Gredler, Bruno Rijsman, Brian Carpenter, and Thomas Mangin for their valuable input.

著者は、Pedro Marques、Hannes Gredler、Bruno Rijsman、Brian Carpenter、およびThomas Manginに貴重な入力に感謝します。

Contributors

貢献者

Danny McPherson Verisign, Inc.

Danny McPherson Verisign、Inc。

   Email: dmcpherson@verisign.com
        

Burjiz Pithawala Individual

Burjiz Pithawala個人

   Email: burjizp@gmail.com
        

Andy Karch Cisco Systems 170 West Tasman Drive San Jose, CA 95134 United States of America

Andy Karch Cisco Systems 170 West Tasman Drive San Jose、CA 95134アメリカ合衆国

   Email: akarch@cisco.com
        

Authors' Addresses

著者の住所

Christoph Loibl (editor) next layer Telekom GmbH Mariahilfer Guertel 37/7 1150 Vienna Austria

Christoph Loibl(編集)次のレイヤーTelekom GmbH Mariahilfer Guertel 37/7 1150ウィーンオーストリア

   Phone: +43 664 1176414
   Email: cl@tix.at
        

Robert Raszuk (editor) NTT Network Innovations 940 Stewart Dr Sunnyvale, CA 94085 United States of America

Robert Raszuk(編集)NTTネットワーク革新940 Stewart Dr Sunnyvale、CA 94085アメリカ合衆国

   Email: robert@raszuk.net
        

Susan Hares (editor) Huawei 7453 Hickory Hill Saline, MI 48176 United States of America

Susan Hares(編集)Huawei 7453 Hickory Hill Saline、MI 48176アメリカ

   Email: shares@ndzh.com