|
69 | 69 | */
|
70 | 70 | #define FPM_HEADER_SIZE 4
|
71 | 71 |
|
| 72 | +/* Default SRv6 SID format values */ |
| 73 | +DEFAULT_SRV6_LOCALSID_FORMAT_BLOCK_LEN = 32; |
| 74 | +DEFAULT_SRV6_LOCALSID_FORMAT_NODE_LEN = 16; |
| 75 | +DEFAULT_SRV6_LOCALSID_FORMAT_FUNCTION_LEN = 16; |
| 76 | +DEFAULT_SRV6_LOCALSID_FORMAT_ARGUMENT_LEN = 0; |
| 77 | + |
72 | 78 | /**
|
73 | 79 | * Custom Netlink TLVs
|
74 | 80 | */
|
@@ -951,6 +957,7 @@ static ssize_t netlink_srv6_localsid_msg_encode(int cmd,
|
951 | 957 | vrf_id_t vrf_id;
|
952 | 958 | uint32_t table_id;
|
953 | 959 | uint32_t action;
|
| 960 | + uint32_t block_len, node_len, func_len, arg_len; |
954 | 961 |
|
955 | 962 | struct {
|
956 | 963 | struct nlmsghdr n;
|
@@ -1035,28 +1042,44 @@ static ssize_t netlink_srv6_localsid_msg_encode(int cmd,
|
1035 | 1042 | nl_attr_nest(&req->n, datalen,
|
1036 | 1043 | FPM_SRV6_LOCALSID_FORMAT);
|
1037 | 1044 |
|
| 1045 | + block_len = nexthop->nh_srv6->seg6local_ctx.block_len; |
| 1046 | + node_len = nexthop->nh_srv6->seg6local_ctx.node_len; |
| 1047 | + func_len = nexthop->nh_srv6->seg6local_ctx.function_len; |
| 1048 | + arg_len = nexthop->nh_srv6->seg6local_ctx.argument_len; |
| 1049 | + |
| 1050 | + /* |
| 1051 | + * If block/node/func/arg length are not provided by the srv6 nexthop, |
| 1052 | + * then we use the default values |
| 1053 | + */ |
| 1054 | + if (block_len == 0 && node_len == 0 && func_len == 0 && arg_len == 0) { |
| 1055 | + block_len = DEFAULT_SRV6_LOCALSID_FORMAT_BLOCK_LEN; |
| 1056 | + node_len = DEFAULT_SRV6_LOCALSID_FORMAT_NODE_LEN; |
| 1057 | + func_len = DEFAULT_SRV6_LOCALSID_FORMAT_FUNCTION_LEN; |
| 1058 | + arg_len = DEFAULT_SRV6_LOCALSID_FORMAT_ARGUMENT_LEN; |
| 1059 | + } |
| 1060 | + |
1038 | 1061 | if (!nl_attr_put8(
|
1039 | 1062 | &req->n, datalen,
|
1040 | 1063 | FPM_SRV6_LOCALSID_FORMAT_BLOCK_LEN,
|
1041 |
| - nexthop->nh_srv6->seg6local_ctx.block_len)) |
| 1064 | + block_len)) |
1042 | 1065 | return -1;
|
1043 | 1066 |
|
1044 | 1067 | if (!nl_attr_put8(
|
1045 | 1068 | &req->n, datalen,
|
1046 | 1069 | FPM_SRV6_LOCALSID_FORMAT_NODE_LEN,
|
1047 |
| - nexthop->nh_srv6->seg6local_ctx.node_len)) |
| 1070 | + node_len)) |
1048 | 1071 | return -1;
|
1049 | 1072 |
|
1050 | 1073 | if (!nl_attr_put8(
|
1051 | 1074 | &req->n, datalen,
|
1052 | 1075 | FPM_SRV6_LOCALSID_FORMAT_FUNC_LEN,
|
1053 |
| - nexthop->nh_srv6->seg6local_ctx.function_len)) |
| 1076 | + func_len)) |
1054 | 1077 | return -1;
|
1055 | 1078 |
|
1056 | 1079 | if (!nl_attr_put8(
|
1057 | 1080 | &req->n, datalen,
|
1058 | 1081 | FPM_SRV6_LOCALSID_FORMAT_ARG_LEN,
|
1059 |
| - nexthop->nh_srv6->seg6local_ctx.argument_len)) |
| 1082 | + arg_len)) |
1060 | 1083 | return -1;
|
1061 | 1084 |
|
1062 | 1085 | nl_attr_nest_end(&req->n, nest);
|
|
0 commit comments