Contiki 3.x
llsec.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013, Hasso-Plattner-Institut.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the Institute nor the names of its contributors
14  * may be used to endorse or promote products derived from this software
15  * without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * This file is part of the Contiki operating system.
30  *
31  */
32 
33 /**
34  * \file
35  * Link layer security header file.
36  * \author
37  * Konrad Krentz <konrad.krentz@gmail.com>
38  */
39 
40 /**
41  * \ingroup net
42  * \defgroup llsec Link Layer Security
43  *
44  * Layer for implementing link layer security.
45  *
46  * NETSTACK_LLSEC sits in between NETSTACK_MAC and NETSTACK_NETWORK
47  * protocols. All NETSTACK_MAC protocols invoke NETSTACK_LLSEC.input()
48  * for incoming packets. Likewise, all NETSTACK_NETWORK protocols
49  * invoke NETSTACK_LLSEC.send(...) for outgoing packets.
50  *
51  * The bootstrap function of llsec_drivers can be used to defer the start
52  * of upper layers so as to bootstrap pairwise keys. Only contiki-sky-main.c
53  * supports this at the moment.
54  *
55  * @{
56  */
57 
58 #ifndef LLSEC_H_
59 #define LLSEC_H_
60 
61 #include "net/mac/mac.h"
62 
63 typedef void (* llsec_on_bootstrapped_t)(void);
64 
65 /**
66  * The structure of a link layer security driver.
67  */
68 struct llsec_driver {
69  char *name;
70 
71  /** Bootstraps link layer security and thereafter starts upper layers. */
72  void (* bootstrap)(llsec_on_bootstrapped_t on_bootstrapped);
73 
74  /** Secures outgoing frames before passing them to NETSTACK_MAC. */
75  void (* send)(mac_callback_t sent_callback, void *ptr);
76 
77  /**
78  * Once the NETSTACK_FRAMER wrote the headers, the LLSEC driver
79  * can generate a MIC over the entire frame.
80  * \return Returns != 0 <-> success
81  */
82  int (* on_frame_created)(void);
83 
84  /**
85  * Decrypts incoming frames;
86  * filters out injected or replayed frames.
87  */
88  void (* input)(void);
89 
90  /** Returns the security-related overhead per frame in bytes */
91  uint8_t (* get_overhead)(void);
92 };
93 
94 #endif /* LLSEC_H_ */
95 
96 /** @} */
uint8_t(* get_overhead)(void)
Returns the security-related overhead per frame in bytes.
Definition: llsec.h:91
int(* on_frame_created)(void)
Once the NETSTACK_FRAMER wrote the headers, the LLSEC driver can generate a MIC over the entire frame...
Definition: llsec.h:82
The structure of a link layer security driver.
Definition: llsec.h:68
void(* bootstrap)(llsec_on_bootstrapped_t on_bootstrapped)
Bootstraps link layer security and thereafter starts upper layers.
Definition: llsec.h:72
void(* send)(mac_callback_t sent_callback, void *ptr)
Secures outgoing frames before passing them to NETSTACK_MAC.
Definition: llsec.h:75
void(* input)(void)
Decrypts incoming frames; filters out injected or replayed frames.
Definition: llsec.h:88
MAC driver header file