[NET_SCHED]: ematch: module autoloading
Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
662ad4f8ef
Коммит
db3d99c090
|
@ -403,16 +403,13 @@ enum
|
||||||
* 1..32767 Reserved for ematches inside kernel tree
|
* 1..32767 Reserved for ematches inside kernel tree
|
||||||
* 32768..65535 Free to use, not reliable
|
* 32768..65535 Free to use, not reliable
|
||||||
*/
|
*/
|
||||||
enum
|
#define TCF_EM_CONTAINER 0
|
||||||
{
|
#define TCF_EM_CMP 1
|
||||||
TCF_EM_CONTAINER,
|
#define TCF_EM_NBYTE 2
|
||||||
TCF_EM_CMP,
|
#define TCF_EM_U32 3
|
||||||
TCF_EM_NBYTE,
|
#define TCF_EM_META 4
|
||||||
TCF_EM_U32,
|
#define TCF_EM_TEXT 5
|
||||||
TCF_EM_META,
|
#define TCF_EM_MAX 5
|
||||||
TCF_EM_TEXT,
|
|
||||||
__TCF_EM_MAX
|
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
|
|
@ -306,6 +306,8 @@ static inline int tcf_em_tree_match(struct sk_buff *skb,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MODULE_ALIAS_TCF_EMATCH(kind) MODULE_ALIAS("ematch-kind-" __stringify(kind))
|
||||||
|
|
||||||
#else /* CONFIG_NET_EMATCH */
|
#else /* CONFIG_NET_EMATCH */
|
||||||
|
|
||||||
struct tcf_ematch_tree
|
struct tcf_ematch_tree
|
||||||
|
|
|
@ -98,3 +98,4 @@ MODULE_LICENSE("GPL");
|
||||||
module_init(init_em_cmp);
|
module_init(init_em_cmp);
|
||||||
module_exit(exit_em_cmp);
|
module_exit(exit_em_cmp);
|
||||||
|
|
||||||
|
MODULE_ALIAS_TCF_EMATCH(TCF_EM_CMP);
|
||||||
|
|
|
@ -848,3 +848,5 @@ MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
module_init(init_em_meta);
|
module_init(init_em_meta);
|
||||||
module_exit(exit_em_meta);
|
module_exit(exit_em_meta);
|
||||||
|
|
||||||
|
MODULE_ALIAS_TCF_EMATCH(TCF_EM_META);
|
||||||
|
|
|
@ -76,3 +76,5 @@ MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
module_init(init_em_nbyte);
|
module_init(init_em_nbyte);
|
||||||
module_exit(exit_em_nbyte);
|
module_exit(exit_em_nbyte);
|
||||||
|
|
||||||
|
MODULE_ALIAS_TCF_EMATCH(TCF_EM_NBYTE);
|
||||||
|
|
|
@ -150,3 +150,5 @@ MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
module_init(init_em_text);
|
module_init(init_em_text);
|
||||||
module_exit(exit_em_text);
|
module_exit(exit_em_text);
|
||||||
|
|
||||||
|
MODULE_ALIAS_TCF_EMATCH(TCF_EM_TEXT);
|
||||||
|
|
|
@ -60,3 +60,5 @@ MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
module_init(init_em_u32);
|
module_init(init_em_u32);
|
||||||
module_exit(exit_em_u32);
|
module_exit(exit_em_u32);
|
||||||
|
|
||||||
|
MODULE_ALIAS_TCF_EMATCH(TCF_EM_U32);
|
||||||
|
|
|
@ -222,6 +222,19 @@ static int tcf_em_validate(struct tcf_proto *tp,
|
||||||
|
|
||||||
if (em->ops == NULL) {
|
if (em->ops == NULL) {
|
||||||
err = -ENOENT;
|
err = -ENOENT;
|
||||||
|
#ifdef CONFIG_KMOD
|
||||||
|
__rtnl_unlock();
|
||||||
|
request_module("ematch-kind-%u", em_hdr->kind);
|
||||||
|
rtnl_lock();
|
||||||
|
em->ops = tcf_em_lookup(em_hdr->kind);
|
||||||
|
if (em->ops) {
|
||||||
|
/* We dropped the RTNL mutex in order to
|
||||||
|
* perform the module load. Tell the caller
|
||||||
|
* to replay the request. */
|
||||||
|
module_put(em->ops->owner);
|
||||||
|
err = -EAGAIN;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче