linux/include/net/cls_cgroup.h
<<
>>
Prefs
   1/*
   2 * cls_cgroup.h                 Control Group Classifier
   3 *
   4 * Authors:     Thomas Graf <tgraf@suug.ch>
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of the GNU General Public License as published by the Free
   8 * Software Foundation; either version 2 of the License, or (at your option)
   9 * any later version.
  10 *
  11 */
  12
  13#ifndef _NET_CLS_CGROUP_H
  14#define _NET_CLS_CGROUP_H
  15
  16#include <linux/cgroup.h>
  17#include <linux/hardirq.h>
  18#include <linux/rcupdate.h>
  19
  20#if IS_ENABLED(CONFIG_NET_CLS_CGROUP)
  21struct cgroup_cls_state
  22{
  23        struct cgroup_subsys_state css;
  24        u32 classid;
  25};
  26
  27extern void sock_update_classid(struct sock *sk);
  28
  29#if IS_BUILTIN(CONFIG_NET_CLS_CGROUP)
  30static inline u32 task_cls_classid(struct task_struct *p)
  31{
  32        int classid;
  33
  34        if (in_interrupt())
  35                return 0;
  36
  37        rcu_read_lock();
  38        classid = container_of(task_subsys_state(p, net_cls_subsys_id),
  39                               struct cgroup_cls_state, css)->classid;
  40        rcu_read_unlock();
  41
  42        return classid;
  43}
  44#elif IS_MODULE(CONFIG_NET_CLS_CGROUP)
  45static inline u32 task_cls_classid(struct task_struct *p)
  46{
  47        struct cgroup_subsys_state *css;
  48        u32 classid = 0;
  49
  50        if (in_interrupt())
  51                return 0;
  52
  53        rcu_read_lock();
  54        css = task_subsys_state(p, net_cls_subsys_id);
  55        if (css)
  56                classid = container_of(css,
  57                                       struct cgroup_cls_state, css)->classid;
  58        rcu_read_unlock();
  59
  60        return classid;
  61}
  62#endif
  63#else /* !CGROUP_NET_CLS_CGROUP */
  64static inline void sock_update_classid(struct sock *sk)
  65{
  66}
  67
  68static inline u32 task_cls_classid(struct task_struct *p)
  69{
  70        return 0;
  71}
  72#endif /* CGROUP_NET_CLS_CGROUP */
  73#endif  /* _NET_CLS_CGROUP_H */
  74
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.