embox

Форк
0
/
skbuff_rule.c 
51 строка · 1.3 Кб
1
/**
2
 * @file
3
 * @brief
4
 *
5
 * @date 26.10.2011
6
 * @author Anton Kozlov
7
 */
8

9
#include <string.h>
10
#include <mem/objalloc.h>
11
#include <net/l4/udp.h>
12
#include <net/l3/ipv4/ip.h>
13
#include <net/l2/ethernet.h>
14
#include <net/skbuff.h>
15

16
#include <pnet/core/types.h>
17
#include <pnet/node/skbuff_match/netfilter/match_lin.h>
18

19
OBJALLOC_DEF(match_rules, struct match_rule, MAX_RULE_COUNT);
20

21
match_rule_t pnet_rule_alloc(void) {
22
	struct sk_buff *skb;
23
	match_rule_t rule = (match_rule_t) objalloc(&match_rules);
24

25
	/* alloc memory only for header */
26
	skb = skb_alloc(MAX_PACK_HEADER_SIZE);
27

28
	rule->skbuf = skb;
29
	/* FIXME mac.raw initialized in skb_alloc. I think nh.raw also is uniquely determined.
30
	 * But now we initialize it in net/core/net_entry.c. So, temporary I suppose
31
	 * that is no initialization of nh in skb_alloc() --Alexander */
32
	rule->skbuf->nh.raw = rule->skbuf->mac.raw + ETH_HEADER_SIZE;
33

34
	/* Fill data with 255 per byte. It means '*', i.e. any value is suitable. */
35
	memset(rule->skbuf->mac.raw, MATCH_WILDCARD, MAX_PACK_HEADER_SIZE);
36
	rule->next_node = NULL;
37

38
	/* All rules and packets have priority 0 after allocation. */
39
	rule->priority = 0;
40
	INIT_LIST_HEAD(&rule->lnk);
41

42
	return rule;
43
}
44

45
void pnet_rule_free(match_rule_t rule) {
46
	if (NULL == rule) {
47
		return;
48
	}
49
	skb_free(rule->skbuf);
50
	objfree(&match_rules, rule);
51
}
52

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.