bool __pfq_group_access(int gid, int id, int policy, bool join) { struct pfq_group * that = &pfq_groups[gid]; if (__pfq_has_joined_group(gid,id)) return true; switch(that->policy) { case Q_GROUP_PRIVATE: return false; case Q_GROUP_RESTRICTED: return (join == false || policy == Q_GROUP_RESTRICTED) && that->pid == current->tgid; case Q_GROUP_SHARED: return join == false || policy == Q_GROUP_SHARED; case Q_GROUP_UNDEFINED: return true; } return false; }
bool __pfq_group_access(int gid, int id, int policy, bool create) { struct pfq_group * g = pfq_get_group(gid); if (!g) { pr_devel("[PFQ] get_group: invalid group id %d!\n", gid); return false; } switch(g->policy) { case Q_POLICY_GROUP_PRIVATE: return __pfq_has_joined_group(gid,id); case Q_POLICY_GROUP_RESTRICTED: return (create == false || policy == Q_POLICY_GROUP_RESTRICTED) && g->pid == current->tgid; case Q_POLICY_GROUP_SHARED: return create == false || policy == Q_POLICY_GROUP_SHARED; case Q_POLICY_GROUP_UNDEFINED: return true; } return false; }