Re: [nft PATCH] src: add redirect support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 15 October 2014 12:08, Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> wrote:
> On Wed, Oct 15, 2014 at 09:47:56AM +0200, Arturo Borrero Gonzalez wrote:
>> This patch adds redirect support for nft.
>>
>> The syntax is:
>>
>>  % nft add rule nat prerouting redirect [port|nat_flags]
>>
>> Signed-off-by: Arturo Borrero Gonzalez <arturo.borrero.glez@xxxxxxxxx>
>> ---
>>  include/statement.h       |   10 +++++++++
>>  src/evaluate.c            |   42 ++++++++++++++++++++++++++++++++++++
>>  src/netlink_delinearize.c |   52 +++++++++++++++++++++++++++++++++++++++++++++
>>  src/netlink_linearize.c   |   49 ++++++++++++++++++++++++++++++++++++++++++
>>  src/parser.y              |   23 ++++++++++++++++++--
>>  src/scanner.l             |    1 +
>>  src/statement.c           |   29 +++++++++++++++++++++++++
>>  7 files changed, 204 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/statement.h b/include/statement.h
>> index 35c1b7a..d143121 100644
>> --- a/include/statement.h
>> +++ b/include/statement.h
>> @@ -79,6 +79,13 @@ struct masq_stmt {
>>
>>  extern struct stmt *masq_stmt_alloc(const struct location *loc);
>>
>> +struct redir_stmt {
>> +     struct expr             *proto;
>> +     uint32_t                flags;
>> +};
>> +
>> +extern struct stmt *redir_stmt_alloc(const struct location *loc);
>> +
>>  struct queue_stmt {
>>       struct expr             *queue;
>>       uint16_t                flags;
>> @@ -110,6 +117,7 @@ extern struct stmt *ct_stmt_alloc(const struct location *loc,
>>   * @STMT_REJECT:     REJECT statement
>>   * @STMT_NAT:                NAT statement
>>   * @STMT_MASQ:               masquerade statement
>> + * @STMT_REDIR:              redirect statement
>>   * @STMT_QUEUE:              QUEUE statement
>>   * @STMT_CT:         conntrack statement
>>   */
>> @@ -124,6 +132,7 @@ enum stmt_types {
>>       STMT_REJECT,
>>       STMT_NAT,
>>       STMT_MASQ,
>> +     STMT_REDIR,
>>       STMT_QUEUE,
>>       STMT_CT,
>>  };
>> @@ -172,6 +181,7 @@ struct stmt {
>>               struct reject_stmt      reject;
>>               struct nat_stmt         nat;
>>               struct masq_stmt        masq;
>> +             struct redir_stmt       redir;
>>               struct queue_stmt       queue;
>>               struct ct_stmt          ct;
>>       };
>> diff --git a/src/evaluate.c b/src/evaluate.c
>> index 108248a..6a2c724 100644
>> --- a/src/evaluate.c
>> +++ b/src/evaluate.c
>> @@ -1375,6 +1375,46 @@ out:
>>       return 0;
>>  }
>>
>> +static int stmt_evaluate_redir(struct eval_ctx *ctx, struct stmt *stmt)
>> +{
>> +     int err;
>> +     struct proto_ctx *pctx = &ctx->pctx;
>> +
>> +     if (!pctx)
>> +             goto out;
>> +
>> +     switch (pctx->family) {
>> +     case AF_INET:
>> +             expr_set_context(&ctx->ectx, &ipaddr_type,
>> +                             4 * BITS_PER_BYTE);
>> +             break;
>> +     case AF_INET6:
>> +             expr_set_context(&ctx->ectx, &ip6addr_type,
>> +                              16 * BITS_PER_BYTE);
>> +             break;
>> +     default:
>> +             return stmt_error(ctx, stmt, "ip and ip6 support only");
>> +     }
>> +
>> +     if (stmt->redir.proto != NULL) {
>> +             if (pctx->protocol[PROTO_BASE_TRANSPORT_HDR].desc == NULL)
>> +                     return stmt_binary_error(ctx, stmt->redir.proto, stmt,
>> +                                              "transport protocol mapping "
>> +                                              "is only valid after "
>> +                                              "transport protocol match");
>
> Errors have to fit in one line, preferably.
>

Could you please give some suggestion?

regards.

-- 
Arturo Borrero González
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux