5.1. Ordering of Flow Specifications (Flow Specification の順序付け)
5.1. Ordering of Flow Specifications (Flow Specification の順序付け)
複数の Flow Specification が特定のトラフィックフローに一致する可能性があります。したがって, Flow Specification が一致する順序と, 特定のトラフィックフローに適用されるアクションを定義する必要があります。この順序付け関数は, BGP を介した Flow Specification の到着順序に依存しないため, ネットワーク内で一貫しています。
2 つの Flow Specification の相対的な順序は, それぞれのコンポーネントを比較することによって決定されます。アルゴリズムは, Flow Specification の最も左側のコンポーネント (最も低いコンポーネントタイプ値) を比較することから始まります。タイプが異なる場合, 最も低い数値タイプ値を持つ Flow Specification は, そのコンポーネントタイプを含まない Flow Specification よりも高い優先順位を持ちます (したがって先に一致します)。コンポーネントタイプが同じ場合, タイプ固有の比較が実行されます (以下を参照)。タイプが等しい場合, アルゴリズムは次のコンポーネントに進みます。
IP プレフィックス値 (IP 宛先または送信元プレフィックス) の場合, 比較する 2 つのプレフィックスの一方が他方のより具体的なプレフィックスである場合, より具体的なプレフィックスが高い優先順位を持ちます。そうでない場合, 最も低い IP 値を持つものが高い優先順位を持ちます。
他のすべてのコンポーネントタイプについて, 特に指定されていない限り, [ISO_IEC_9899] で定義されている memcmp() 関数を使用してコンポーネントデータをバイナリ文字列として比較することによって比較が実行されます。長さが等しい文字列の場合, 最も低い文字列 (memcmp) が高い優先順位を持ちます。長さが異なる文字列の場合, 共通プレフィックスが比較されます。共通プレフィックスが等しくない場合, 最も低いプレフィックスを持つ文字列が高い優先順位を持ちます。共通プレフィックスが等しい場合, 長い文字列は短い文字列よりも高い優先順位を持つと見なされます。
付録 A のコードは, 比較アルゴリズムの Python3 実装を示しています。完全なコードは Python 3.6.3 でテストされており, <https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp> から入手できます。