diff options
Diffstat (limited to 'ovn')
-rw-r--r-- | ovn/TODO | 6 | ||||
-rw-r--r-- | ovn/lib/actions.c | 18 | ||||
-rw-r--r-- | ovn/ovn-sb.xml | 5 |
3 files changed, 12 insertions, 17 deletions
@@ -38,12 +38,6 @@ ovn-sb.xml includes a tentative specification for this action. IPv6 will probably need an action or actions for ND that is similar to the "arp" action, and an action for generating -*** ct_label 128-bit support. - -We only support 64-bits for the ct_label argument to ct_commit(), but ct_label -is a 128-bit field. The OVN lexer only supports parsing 64-bit integers, but -we can use parse_int_string() to support larger integers. - ** IPv6 *** ND versus ARP diff --git a/ovn/lib/actions.c b/ovn/lib/actions.c index 3d10d611e..dda895935 100644 --- a/ovn/lib/actions.c +++ b/ovn/lib/actions.c @@ -879,16 +879,18 @@ parse_ct_commit_arg(struct action_context *ctx, action_error(ctx, "Expected '=' after argument to ct_commit"); return false; } + + /* ct_label is a 128-bit field. The lexer supports 128-bit + * integers if its a hex string. The ct_label value should be specified + * in hex string if > 64-bits are to be used */ if (ctx->lexer->token.type == LEX_T_INTEGER) { - label_value->be64.lo = ctx->lexer->token.value.integer; + label_value->be64.lo = ctx->lexer->token.value.be128_int.be64.lo; + label_value->be64.hi = ctx->lexer->token.value.be128_int.be64.hi; } else if (ctx->lexer->token.type == LEX_T_MASKED_INTEGER) { - /* XXX Technically, ct_label is a 128-bit field. The lexer - * only supports 64-bit integers, so that's all we support - * here. More work is needed to use parse_int_string() - * to support the full 128-bits. */ - label_value->be64.lo = ctx->lexer->token.value.integer; - label_mask->be64.hi = 0; - label_mask->be64.lo = ctx->lexer->token.mask.integer; + label_value->be64.lo = ctx->lexer->token.value.be128_int.be64.lo; + label_value->be64.hi = ctx->lexer->token.value.be128_int.be64.hi; + label_mask->be64.lo = ctx->lexer->token.mask.be128_int.be64.lo; + label_mask->be64.hi = ctx->lexer->token.mask.be128_int.be64.hi; } else { action_error(ctx, "Expected integer after 'ct_label='"); return false; diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml index 7b45bbbcf..1b5bf9e4d 100644 --- a/ovn/ovn-sb.xml +++ b/ovn/ovn-sb.xml @@ -982,9 +982,8 @@ <code>ct_mark</code> and/or <code>ct_label</code> will be set to the values indicated by <var>value[/mask]</var> on the connection tracking entry. <code>ct_mark</code> is a 32-bit field. - <code>ct_label</code> is technically a 128-bit field, though OVN - currently only supports 64-bits and will later be extended to - support the full 128-bits. + <code>ct_label</code> is a 128-bit field. The <var>value[/mask]</var> + should be specified in hex string if more than 64bits are to be used. </p> <p> |