This repository has been archived by the owner on Nov 3, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbardiche
130 lines (96 loc) · 4.74 KB
/
bardiche
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Project Bardiche
Bardiche is a project that is redesigning how others might consume a
layer 2 datapath in the system. This is primarily aimed at solving the
problem for virtualization, but it can also be consumed for anything
which wishes to have a high throughput layer 2 datapath. More
importantly, it allows these applications to utilize the various
features that Fire Engine and Crossbow have brought to the networking
stack, while creating a foundation for leveraging the capabilities of
the system in a way that we can't today.
## Integration Complete
vnd was integrated into SmartOS on 2014 March 19 and is shipping and
enabled in all SmartOS releases since then. The remainder of this page
remains for historical purposes.
## Images
Project Bardiche is currently a *beta*. Do *not* use it in production.
That said, it should basically work. Please give it a shot and provide
feedback.
* Bardiche build date: 26 Feb 2014
* SmartOS duild date: 26 Feb 2014
* [ISO](./images/20140226/platform-20140226T220716Z.iso)
* [Platform](./images/20140226/platform-20140226T220716Z.tgz)
* [USB](./images/20140226/platform-20140226T220716Z.usb.bz2)
If you have issues or questions about these bits, please ask for
`rmustacc` in `#smartos` on `irc.freenode.net` or e-mail
### Using bardiche
All kvm instances will be set up to use bardiche and the new vnd driver
automatically. Once you have that, you should be able to use the `fwadm`
command or use `ipf -G`.
## Code
This project is under active development. The code below is a snapshot
from 26 Feb 2014.
This consists of several different changes. The biggest of these is the
introduction of a new psuedo-driver called `vnd` and a corresponding
command and library, `vndadm` and `libvnd.so`. The pseudo-driver
provides a character device that programs can read and write directly,
as well as use private frame I/O ioctls. The `vnd` driver is wired up to
use the MAC fast path (like IP) and currently has its own version of
`squeues` as the IP stack ones are not currently generalizable.
In addition, there are a few other important changes that have come
along with this for illumos:
* Introduction of a plug in interface for sdev that a driver can
implement
* Allowing the global zone's `/dev/net` to see all datalinks in zones
under `/dev/net/zone/%zonename/%datalink`.
* snoop and libdlpi can consume the above and thus the GZ can snoop on
a zones network interfaces
* A new dlpi promiscuous option that allows the consumer to only get
RX packets promiscuously. This solves the kvm IPv6 loopback bug.
* ipf receives all IP and IPv6 packets from vnd
The full list of bugs is:
```
Project Bardiche
OS-2784 want sdev plugin interface
OS-2783 want generalized squeues
OS-2785 ipf should be able to hook kvm nics
OS-2782 want /dev/net/zone/%zonename/%datalink
OS-610 snoop and libdlpi should be able to consume
/dev/net/zone/%zonename
OS-2786 .gitignore should include debug object directories
OS-2781 dlpi promisc modes should be able to be RX-only
OS-2780 Want dlpi primitive DL_EXCLUSIVE_REQ
OS-2779 Makefile.man should take care of directory creation
OS-2778 dls_promisc doesn't properly handle all transitions
```
Full descriptions of each bug can be seen at [SmartOS
Bugview](http://smartos.org/bugview/index.html).
The KVM code base has been modified to remove terrible hacks associated
with the old method of send and receive buffers.
### Delta
Currently this project consists of changes to
[illumos](http://github.com/joyent/illumos-joyent),
[illumos-kvm](http://github.com/joyent/illumos-kvm),
[QEMU](http://github.com/joyent/illumos-kvm-cmd), and
[smartos-live](http://github.com/joyent/smartos-live).
A series of webrevs are availble here:
* [illumos](./code/webrevs/20140226/illumos/index.html)
* [KVM](./code/webrevs/20140226/kvm/index.html)
* [QEMU](./code/webrevs/20140226/kvm-cmd/index.html)
* [smartos-live](./code/webrevs/20140226/smartos-live/index.html)
A series of git patches are available here:
* [illumos](./code/patches/20140226/illumos.patch)
* [KVM](./code/patches/20140226/kvm.patch)
* [QEMU](./code/patches/20140226/kvm-cmd.patch)
* [smartos-live](./code/patches/20140226/live.patch)
## Design Docs
There are design documents for bardiche and its companion frame I/O.
These will be updated from time to time and most of the relevant
information will enter the big theory statement in the code.
* [Bardiche](./docs/bardiche)
* [Frame I/O](./docs/frameio)
## Contact
For questions, comments, thoughts, feedback, and anything else, talk to
Robert Mustacchi, `rmustacc` in `#illumos` and `#smartos` on
`irc.freenode.net`. Alternatively, send e-mail to
`[email protected]` or ping him directly.