Add parlib/common.h
[akaros.git] / user / parlib / include / dtls.h
1 /*
2  * Copyright (c) 2012 The Regents of the University of California
3  * Kevin Klues <klueska@cs.berkeley.edu>
4  *
5  * This file is part of Parlib.
6  * 
7  * Parlib is free software: you can redistribute it and/or modify
8  * it under the terms of the Lesser GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  * 
12  * Parlib is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * Lesser GNU General Public License for more details.
16  * 
17  * See COPYING.LESSER for details on the GNU Lesser General Public License.
18  * See COPYING for details on the GNU General Public License.
19  */
20
21 #ifndef PARLIB_DTLS_H
22 #define PARLIB_DTLS_H
23
24 #include <stdint.h>
25 #include <stdlib.h>
26
27 __BEGIN_DECLS
28
29 #ifndef __GNUC__
30   #error "You need to be using gcc to compile this library..."
31 #endif 
32
33 /* Declaration of types needed for dynamically allocatable tls */
34 typedef struct dtls_key *dtls_key_t;
35 typedef void (*dtls_dtor_t)(void*);
36
37 /* Initialize a dtls_key for dynamically setting/getting uthread local storage
38  * on a uthread or vcore. */
39 dtls_key_t dtls_key_create(dtls_dtor_t dtor);
40
41 /* Destroy a dtls key. */
42 void dtls_key_delete(dtls_key_t key);
43
44 /* Set dtls storage for the provided dtls key on the current uthread or vcore. */
45 void set_dtls(dtls_key_t key, void *dtls);
46
47 /* Get dtls storage for the provided dtls key on the current uthread or vcore. */
48 void *get_dtls(dtls_key_t key);
49
50 /* Destroy all dtls storage associated with the current uthread or vcore. */
51 void destroy_dtls();
52
53 __END_DECLS
54
55 #endif /* PARLIB_DTLS_H */