Esempio n. 1
0
static int em_text_match(struct sk_buff *skb, struct tcf_ematch *m,
                         struct tcf_pkt_info *info)
{
    struct text_match *tm = EM_TEXT_PRIV(m);
    int from, to;
    struct ts_state state;

    from = tcf_get_base_ptr(skb, tm->from_layer) - skb->data;
    from += tm->from_offset;

    to = tcf_get_base_ptr(skb, tm->to_layer) - skb->data;
    to += tm->to_offset;

    return skb_find_text(skb, from, to, tm->config, &state) != UINT_MAX;
}
Esempio n. 2
0
static int em_text_dump(struct sk_buff *skb, struct tcf_ematch *m)
{
	struct text_match *tm = EM_TEXT_PRIV(m);
	struct tcf_em_text conf;

	strncpy(conf.algo, tm->config->ops->name, sizeof(conf.algo) - 1);
	conf.from_offset = tm->from_offset;
	conf.to_offset = tm->to_offset;
	conf.from_layer = tm->from_layer;
	conf.to_layer = tm->to_layer;
	conf.pattern_len = textsearch_get_pattern_len(tm->config);
	conf.pad = 0;

	RTA_PUT_NOHDR(skb, sizeof(conf), &conf);
	RTA_APPEND(skb, conf.pattern_len, textsearch_get_pattern(tm->config));
	return 0;

rtattr_failure:
	return -1;
}
Esempio n. 3
0
static int em_text_dump(struct sk_buff *skb, struct tcf_ematch *m)
{
    struct text_match *tm = EM_TEXT_PRIV(m);
    struct tcf_em_text conf;

    strncpy(conf.algo, tm->config->ops->name, sizeof(conf.algo) - 1);
    conf.from_offset = tm->from_offset;
    conf.to_offset = tm->to_offset;
    conf.from_layer = tm->from_layer;
    conf.to_layer = tm->to_layer;
    conf.pattern_len = textsearch_get_pattern_len(tm->config);
    conf.pad = 0;

    if (nla_put_nohdr(skb, sizeof(conf), &conf) < 0)
        goto nla_put_failure;
    if (nla_append(skb, conf.pattern_len,
                   textsearch_get_pattern(tm->config)) < 0)
        goto nla_put_failure;
    return 0;

nla_put_failure:
    return -1;
}
Esempio n. 4
0
static void em_text_destroy(struct tcf_proto *tp, struct tcf_ematch *m)
{
    textsearch_destroy(EM_TEXT_PRIV(m)->config);
}