第16章 MultiNetworkPolicy [k8s.cni.cncf.io/v1beta1]


説明
MultiNetworkPolicy は、Network Plumbing Working Group によって指定される net-attach-def の NetworkPolicy メカニズムを提供する CRD スキーマです。MultiNetworkPolicy は Kubernetes NetworkPolicy と同じです。https://kubernetes.io/docs/concepts/services-networking/network-policies/ を参照してください。
object

16.1. 仕様

プロパティー説明

apiVersion

string

APIVersion はオブジェクトのこの表現のバージョンスキーマを定義します。サーバーは認識されたスキーマを最新の内部値に変換し、認識されない値は拒否することがあります。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources を参照してください。

kind

string

kind はこのオブジェクトが表す REST リソースを表す文字列の値です。サーバーはクライアントが要求を送信するエンドポイントからこれを推測できる場合があります。これを更新することはできません。CamelCase を使用します。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds を参照してください。

metadata

ObjectMeta

標準オブジェクトのメタデータ。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata を参照してください。

spec

object

この MultiNetworkPolicy に期待される動作の仕様。

16.1.1. .spec

説明
この MultiNetworkPolicy に期待される動作の仕様。
object
必須
  • podSelector
プロパティー説明

egress

array

選択した Pod に適用されるスロールールのリスト。Pod を選択する NetworkPolicies がない場合 (およびクラスターポリシーがトラフィックを許可する場合)、または podSelector が Pod と一致するすべての NetworkPolicy オブジェクトにわたってトラフィックが少なくとも 1 つの Egress ルールと一致する場合、送信トラフィックが許可されます。このフィールドが空の場合、この NetworkPolicy はすべての送信トラフィックを制限します (そして、選択した Pod がデフォルトで分離されていることを確認するためだけに機能します)。このフィールドは 1.8 のベータレベルです

egress[]

object

NetworkPolicyEgressRule は、NetworkPolicySpec の podSelector によって一致する Pod から許可される特定のトラフィックセットを記述します。トラフィックは、ポートと宛先の両方に一致する必要があります。このタイプは 1.8 のベータレベルです

ingress

array

選択した Pod に適用される入力ルールのリスト。Pod を選択する NetworkPolicies がない場合 (およびクラスターポリシーがトラフィックを許可する場合)、トラフィックソースが Pod のローカルノードである場合、またはトラフィックがすべての NetworkPolicy 全体で少なくとも 1 つの入力ルールに一致する場合、トラフィックは Pod に許可されます podSelector が Pod と一致するオブジェクト。このフィールドが空の場合、この NetworkPolicy はトラフィックを許可しません (そして、選択した Pod がデフォルトで分離されていることを確認するためだけに機能します)

ingress[]

object

NetworkPolicyIngressRule は、NetworkPolicySpec の podSelector によって一致する Pod に許可される特定のトラフィックセットを記述します。トラフィックは、ポートと送信元の両方に一致する必要があります。

podSelector

object

Pod を選択するラベルセレクターです。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての Pod が選択されます。NamespaceSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、ポリシー自体の名前空間で PodSelector に一致する Pod を選択します。

policyTypes

array (string)

NetworkPolicy が関連するルールタイプのリスト。有効なオプションは、'Ingress'、'Egress'、'Ingress,Egress' です。このフィールドが指定されていない場合、入力ルールまたはスロールールの存在に基づいてデフォルトになります。Egress セクションを含むポリシーは、Egress に影響を与えると見なされ、すべてのポリシー (Ingress セクションを含むかどうかに関係なく) は、Ingress に影響を与えると見なされます。Egress 専用ポリシーを作成する場合は、policyTypes [ 'Egress' ]. を明示的に指定する必要があります。同様に、Egress が許可されないことを指定するポリシーを作成する場合は、(そのようなポリシーには Egress セクションが含まれず、デフォルトで単に [ 'Ingress' ] が設定されるため) 'Egress' を含む policyTypes 値を指定する必要があります。このフィールドは 1.8 のベータレベルです

16.1.2. .spec.egress

説明
選択した Pod に適用されるスロールールのリスト。Pod を選択する NetworkPolicies がない場合 (およびクラスターポリシーがトラフィックを許可する場合)、または podSelector が Pod と一致するすべての NetworkPolicy オブジェクトにわたってトラフィックが少なくとも 1 つの Egress ルールと一致する場合、送信トラフィックが許可されます。このフィールドが空の場合、この NetworkPolicy はすべての送信トラフィックを制限します (そして、選択した Pod がデフォルトで分離されていることを確認するためだけに機能します)。このフィールドは 1.8 のベータレベルです
array

16.1.3. .spec.egress[]

説明
NetworkPolicyEgressRule は、NetworkPolicySpec の podSelector によって一致する Pod から許可される特定のトラフィックセットを記述します。トラフィックは、ポートと宛先の両方に一致する必要があります。このタイプは 1.8 のベータレベルです
object
プロパティー説明

ports

array

発信トラフィックの宛先ポートのリスト。このリストの各項目は、論理 OR を使用して結合されます。このフィールドが空または欠落している場合、このルールはすべてのポートに一致します (トラフィックはポートによって制限されません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックがリスト内の少なくとも 1 つのポートに一致する場合にのみトラフィックを許可します。

ports[]

object

NetworkPolicyPort は、トラフィックを許可するポートを記述します

to

array

このルール用に選択された Pod の送信トラフィックの宛先のリスト。このリストの項目は、論理演算子 OR を使用して組み合わせます。このフィールドが空または欠落している場合、このルールはすべての宛先に一致します (トラフィックは宛先によって制限されません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックが to リストの少なくとも 1 つのアイテムと一致する場合にのみトラフィックを許可します。

to[]

object

NetworkPolicyPeer は、受信トラフィックを許可するピアを記述します。フィールドの特定の組み合わせのみが許可されます

16.1.4. .spec.egress[].ports

説明
発信トラフィックの宛先ポートのリスト。このリストの各項目は、論理 OR を使用して結合されます。このフィールドが空または欠落している場合、このルールはすべてのポートに一致します (トラフィックはポートによって制限されません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックがリスト内の少なくとも 1 つのポートに一致する場合にのみトラフィックを許可します。
array

16.1.5. .spec.egress[].ports[]

説明
NetworkPolicyPort は、トラフィックを許可するポートを記述します
object
プロパティー説明

port

integer-or-string

指定されたプロトコルのポート。これは、Pod の数値ポートまたは名前付きポートのいずれかです。このフィールドが指定されていない場合、これはすべてのポート名と番号に一致します。

protocol

string

トラフィックが一致する必要があるプロトコル (TCP、UDP、または SCTP)。指定しない場合、このフィールドのデフォルトは TCP です。

16.1.6. .spec.egress[].to

説明
このルール用に選択された Pod の送信トラフィックの宛先のリスト。このリストの項目は、論理演算子 OR を使用して組み合わせます。このフィールドが空または欠落している場合、このルールはすべての宛先に一致します (トラフィックは宛先によって制限されません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックが to リストの少なくとも 1 つのアイテムと一致する場合にのみトラフィックを許可します。
array

16.1.7. .spec.egress[].to[]

説明
NetworkPolicyPeer は、受信トラフィックを許可するピアを記述します。フィールドの特定の組み合わせのみが許可されます
object
プロパティー説明

ipBlock

object

IPBlock は、特定の IPBlock に関するポリシーを定義します。このフィールドが設定されている場合は、他のフィールドを設定することはできません。

namespaceSelector

object

クラスタースコープのラベルを使用して名前空間を選択します。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての名前空間が選択されます。PodSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、NamespaceSelector によって選択されたネームスペース内のすべての Pod を選択します。

podSelector

object

Pod を選択するラベルセレクターです。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての Pod が選択されます。NamespaceSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、ポリシー自体の名前空間で PodSelector に一致する Pod を選択します。

16.1.8. .spec.egress[].to[].ipBlock

説明
IPBlock は、特定の IPBlock に関するポリシーを定義します。このフィールドが設定されている場合は、他のフィールドを設定することはできません。
object
必須
  • cidr
プロパティー説明

cidr

string

CIDR は、IP ブロックを表す文字列です。有効な例は '192.168.1.1/24' です。

except

array (string)

Except は、IP ブロックに含めるべきではない CIDR のスライスです。有効な例は '192.168.1.1/24' です。ただし、CIDR の範囲外の場合は、値が拒否されます。

16.1.9. .spec.egress[].to[].namespaceSelector

説明
クラスタースコープのラベルを使用して名前空間を選択します。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての名前空間が選択されます。PodSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、NamespaceSelector によって選択されたネームスペース内のすべての Pod を選択します。
object
プロパティー説明

matchExpressions

array

matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。

matchExpressions[]

object

ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。

matchLabels

object (string)

matchLabels は、{key,value} ペアのマップです。matchLabels マップの 1 つの {key,value} は matchExpressions の要素と同じで、キーフィールドには 'key'、演算子には 'In'、値配列には 'value' のみが含まれます。要件は AND で結合されます。

16.1.10. .spec.egress[].to[].namespaceSelector.matchExpressions

説明
matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。
array

16.1.11. .spec.egress[].to[].namespaceSelector.matchExpressions[]

説明
ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。
object
必須
  • key
  • operator
プロパティー説明

key

string

key は、セレクターの適用先のラベルキーです。

operator

string

operator はキーと値のセットの関係を表します。有効な演算子は In、NotIn、Exists、および DoesNotExist です。

values

array (string)

values は文字列値の配列です。operator が In または NotIn の場合には、values 配列を空白にできません。operator が Exists または DoesNotExist の場合には、values 配列は空白でなければなりません。この配列は、ストラテジーに基づいたマージパッチの適用中に置き換えられます。

16.1.12. .spec.egress[].to[].podSelector

説明
Pod を選択するラベルセレクターです。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての Pod が選択されます。NamespaceSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、ポリシー自体の名前空間で PodSelector に一致する Pod を選択します。
object
プロパティー説明

matchExpressions

array

matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。

matchExpressions[]

object

ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。

matchLabels

object (string)

matchLabels は、{key,value} ペアのマップです。matchLabels マップの 1 つの {key,value} は matchExpressions の要素と同じで、キーフィールドには 'key'、演算子には 'In'、値配列には 'value' のみが含まれます。要件は AND で結合されます。

16.1.13. .spec.egress[].to[].podSelector.matchExpressions

説明
matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。
array

16.1.14. .spec.egress[].to[].podSelector.matchExpressions[]

説明
ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。
object
必須
  • key
  • operator
プロパティー説明

key

string

key は、セレクターの適用先のラベルキーです。

operator

string

operator はキーと値のセットの関係を表します。有効な演算子は In、NotIn、Exists、および DoesNotExist です。

values

array (string)

values は文字列値の配列です。operator が In または NotIn の場合には、values 配列を空白にできません。operator が Exists または DoesNotExist の場合には、values 配列は空白でなければなりません。この配列は、ストラテジーに基づいたマージパッチの適用中に置き換えられます。

16.1.15. .spec.ingress

説明
選択した Pod に適用される入力ルールのリスト。Pod を選択する NetworkPolicies がない場合 (およびクラスターポリシーがトラフィックを許可する場合)、トラフィックソースが Pod のローカルノードである場合、またはトラフィックがすべての NetworkPolicy 全体で少なくとも 1 つの入力ルールに一致する場合、トラフィックは Pod に許可されます podSelector が Pod と一致するオブジェクト。このフィールドが空の場合、この NetworkPolicy はトラフィックを許可しません (そして、選択した Pod がデフォルトで分離されていることを確認するためだけに機能します)
array

16.1.16. .spec.ingress[]

説明
NetworkPolicyIngressRule は、NetworkPolicySpec の podSelector によって一致する Pod に許可される特定のトラフィックセットを記述します。トラフィックは、ポートと送信元の両方に一致する必要があります。
object
プロパティー説明

from

array

このルール用に選択された Pod にアクセスできる必要があるソースのリスト。このリストの項目は、論理演算子 OR を使用して組み合わせます。このフィールドが空または欠落している場合、このルールはすべてのソースに一致します (トラフィックはソースによって制限されていません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックが from リストの少なくとも 1 つのアイテムと一致する場合にのみトラフィックを許可します。

from[]

object

NetworkPolicyPeer は、受信トラフィックを許可するピアを記述します。フィールドの特定の組み合わせのみが許可されます

ports

array

このルール用に選択された Pod でアクセス可能にする必要があるポートのリスト。このリストの各項目は、論理 OR を使用して結合されます。このフィールドが空または欠落している場合、このルールはすべてのポートに一致します (トラフィックはポートによって制限されません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックがリスト内の少なくとも 1 つのポートに一致する場合にのみトラフィックを許可します。

ports[]

object

NetworkPolicyPort は、トラフィックを許可するポートを記述します

16.1.17. .spec.ingress[].from

説明
このルール用に選択された Pod にアクセスできる必要があるソースのリスト。このリストの項目は、論理演算子 OR を使用して組み合わせます。このフィールドが空または欠落している場合、このルールはすべてのソースに一致します (トラフィックはソースによって制限されていません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックが from リストの少なくとも 1 つのアイテムと一致する場合にのみトラフィックを許可します。
array

16.1.18. .spec.ingress[].from[]

説明
NetworkPolicyPeer は、受信トラフィックを許可するピアを記述します。フィールドの特定の組み合わせのみが許可されます
object
プロパティー説明

ipBlock

object

IPBlock は、特定の IPBlock に関するポリシーを定義します。このフィールドが設定されている場合は、他のフィールドを設定することはできません。

namespaceSelector

object

クラスタースコープのラベルを使用して名前空間を選択します。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての名前空間が選択されます。PodSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、NamespaceSelector によって選択されたネームスペース内のすべての Pod を選択します。

podSelector

object

Pod を選択するラベルセレクターです。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての Pod が選択されます。NamespaceSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、ポリシー自体の名前空間で PodSelector に一致する Pod を選択します。

16.1.19. .spec.ingress[].from[].ipBlock

説明
IPBlock は、特定の IPBlock に関するポリシーを定義します。このフィールドが設定されている場合は、他のフィールドを設定することはできません。
object
必須
  • cidr
プロパティー説明

cidr

string

CIDR は、IP ブロックを表す文字列です。有効な例は '192.168.1.1/24' です。

except

array (string)

Except は、IP ブロックに含めるべきではない CIDR のスライスです。有効な例は '192.168.1.1/24' です。ただし、CIDR の範囲外の場合は、値が拒否されます。

16.1.20. .spec.ingress[].from[].namespaceSelector

説明
クラスタースコープのラベルを使用して名前空間を選択します。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての名前空間が選択されます。PodSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、NamespaceSelector によって選択されたネームスペース内のすべての Pod を選択します。
object
プロパティー説明

matchExpressions

array

matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。

matchExpressions[]

object

ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。

matchLabels

object (string)

matchLabels は、{key,value} ペアのマップです。matchLabels マップの 1 つの {key,value} は matchExpressions の要素と同じで、キーフィールドには 'key'、演算子には 'In'、値配列には 'value' のみが含まれます。要件は AND で結合されます。

16.1.21. .spec.ingress[].from[].namespaceSelector.matchExpressions

説明
matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。
array

16.1.22. .spec.ingress[].from[].namespaceSelector.matchExpressions[]

説明
ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。
object
必須
  • key
  • operator
プロパティー説明

key

string

key は、セレクターの適用先のラベルキーです。

operator

string

operator はキーと値のセットの関係を表します。有効な演算子は In、NotIn、Exists、および DoesNotExist です。

values

array (string)

values は文字列値の配列です。operator が In または NotIn の場合には、values 配列を空白にできません。operator が Exists または DoesNotExist の場合には、values 配列は空白でなければなりません。この配列は、ストラテジーに基づいたマージパッチの適用中に置き換えられます。

16.1.23. .spec.ingress[].from[].podSelector

説明
Pod を選択するラベルセレクターです。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての Pod が選択されます。NamespaceSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、ポリシー自体の名前空間で PodSelector に一致する Pod を選択します。
object
プロパティー説明

matchExpressions

array

matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。

matchExpressions[]

object

ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。

matchLabels

object (string)

matchLabels は、{key,value} ペアのマップです。matchLabels マップの 1 つの {key,value} は matchExpressions の要素と同じで、キーフィールドには 'key'、演算子には 'In'、値配列には 'value' のみが含まれます。要件は AND で結合されます。

16.1.24. .spec.ingress[].from[].podSelector.matchExpressions

説明
matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。
array

16.1.25. .spec.ingress[].from[].podSelector.matchExpressions[]

説明
ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。
object
必須
  • key
  • operator
プロパティー説明

key

string

key は、セレクターの適用先のラベルキーです。

operator

string

operator はキーと値のセットの関係を表します。有効な演算子は In、NotIn、Exists、および DoesNotExist です。

values

array (string)

values は文字列値の配列です。operator が In または NotIn の場合には、values 配列を空白にできません。operator が Exists または DoesNotExist の場合には、values 配列は空白でなければなりません。この配列は、ストラテジーに基づいたマージパッチの適用中に置き換えられます。

16.1.26. .spec.ingress[].ports

説明
このルール用に選択された Pod でアクセス可能にする必要があるポートのリスト。このリストの各項目は、論理 OR を使用して結合されます。このフィールドが空または欠落している場合、このルールはすべてのポートに一致します (トラフィックはポートによって制限されません)。このフィールドが存在し、少なくとも 1 つのアイテムが含まれている場合、このルールは、トラフィックがリスト内の少なくとも 1 つのポートに一致する場合にのみトラフィックを許可します。
array

16.1.27. .spec.ingress[].ports[]

説明
NetworkPolicyPort は、トラフィックを許可するポートを記述します
object
プロパティー説明

port

integer-or-string

指定されたプロトコルのポート。これは、Pod の数値ポートまたは名前付きポートのいずれかです。このフィールドが指定されていない場合、これはすべてのポート名と番号に一致します。

protocol

string

トラフィックが一致する必要があるプロトコル (TCP、UDP、または SCTP)。指定しない場合、このフィールドのデフォルトは TCP です。

16.1.28. .spec.podSelector

説明
Pod を選択するラベルセレクターです。このフィールドは、標準のラベルセレクターセマンティクスに従います。存在するが空の場合、すべての Pod が選択されます。NamespaceSelector も設定されている場合、NetworkPolicyPeer は全体として、NamespaceSelector によって選択された名前空間で PodSelector に一致する Pod を選択します。それ以外の場合は、ポリシー自体の名前空間で PodSelector に一致する Pod を選択します。
object
プロパティー説明

matchExpressions

array

matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。

matchExpressions[]

object

ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。

matchLabels

object (string)

 

16.1.29. .spec.podSelector.matchExpressions

説明
matchExpressions はラベルセレクターの要件のリストです。要件は AND で結合されます。
array

16.1.30. .spec.podSelector.matchExpressions[]

説明
ラベルセレクター要件は、値、キー、およびキーと値を関連付ける Operator を含むセレクターです。
object
必須
  • key
  • operator
プロパティー説明

key

string

key は、セレクターの適用先のラベルキーです。

operator

string

operator はキーと値のセットの関係を表します。有効な演算子は In、NotIn、Exists、および DoesNotExist です。

values

array (string)

values は文字列値の配列です。operator が In または NotIn の場合には、values 配列を空白にできません。operator が Exists または DoesNotExist の場合には、values 配列は空白でなければなりません。この配列は、ストラテジーに基づいたマージパッチの適用中に置き換えられます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.