Add implementation of class-of-service
[rahunas] / src / rh-task.h
1 /**
2  * RahuNAS task header
3  * Author: Neutron Soutmun <neo.neutron@gmail.com>
4  * Date:   2008-09-05
5  */
6 #ifndef __RH_TASK_H
7 #define __RH_TASK_H
8
9 #include "rahunasd.h"
10 #include <glib.h>
11
12 #define RH_TASK_MAXNAMELEN 64
13
14 struct task_req {
15   uint32_t id;
16   int vserver_id;
17   const char *username;
18   const char *session_id;
19   unsigned char mac_address[ETH_ALEN];
20   time_t session_start;
21   time_t session_timeout;
22   unsigned short bandwidth_slot_id; 
23   unsigned long bandwidth_max_down;
24   unsigned long bandwidth_max_up;
25   const char *serviceclass_name;
26   uint32_t serviceclass_slot_id;
27   unsigned short req_opt;
28 };
29
30 struct task {
31
32   char taskname[RH_TASK_MAXNAMELEN];
33   unsigned int taskprio;
34
35   /* Start service task */
36   int (*startservice) (void);
37
38   /* Stop service task */
39   int (*stopservice) (void);
40
41   /* Initialize */
42   void (*init) (struct vserver *vs);
43
44   /* Cleanup */
45   void (*cleanup) (struct vserver *vs);
46
47   /* Start session task */
48   int (*startsess) (struct vserver *vs, struct task_req *req);
49
50   /* Stop session task */
51   int (*stopsess) (struct vserver *vs, struct task_req *req);
52
53   /* Commit start session task */
54   int (*commitstartsess) (struct vserver *vs, struct task_req *req);
55
56   /* Commit stop session task */
57   int (*commitstopsess) (struct vserver *vs, struct task_req *req);
58
59   /* Rollback start session task */
60   int (*rollbackstartsess) (struct vserver *vs, struct task_req *req);
61
62   /* Rollback stop session task */
63   int (*rollbackstopsess) (struct vserver *vs, struct task_req *req);
64 };
65
66 extern void task_register(struct main_server *ms, struct task *task);
67
68 void rh_task_register(struct main_server *ms);
69 void rh_task_unregister(struct main_server *ms);
70 int  rh_task_startservice(struct main_server *ms);
71 int  rh_task_stopservice(struct main_server *ms);
72 void rh_task_init(struct main_server *ms, struct vserver *vs);
73 void rh_task_cleanup(struct main_server *ms, struct vserver *vs);
74 int  rh_task_startsess(struct vserver *vs, struct task_req *req);
75 int  rh_task_stopsess(struct vserver *vs, struct task_req *req);
76 int  rh_task_commitstartsess(struct vserver *vs, struct task_req *req);
77 int  rh_task_commitstopsess(struct vserver *vs, struct task_req *req);
78 int  rh_task_rollbackstartsess(struct vserver *vs, struct task_req *req);
79 int  rh_task_rollbackstopsess(struct vserver *vs, struct task_req *req);
80
81 #endif // __RH_TASK_H