diff options
| author | Dario Nieuwenhuis <[email protected]> | 2021-02-24 22:31:07 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2021-02-24 22:31:07 +0100 |
| commit | f100383b3c094830fee4e54956795388bd5edec1 (patch) | |
| tree | 8411f2b03297fc0bd6287cbd1dd340c74d3d72b5 /embassy-net | |
| parent | 7d3878466cfecde17f5e707d65503435394f7ae5 (diff) | |
Make ethernet address configurable from the Device
Diffstat (limited to 'embassy-net')
| -rw-r--r-- | embassy-net/src/device.rs | 1 | ||||
| -rw-r--r-- | embassy-net/src/stack.rs | 9 |
2 files changed, 7 insertions, 3 deletions
diff --git a/embassy-net/src/device.rs b/embassy-net/src/device.rs index ea23635c7..5a266f4ef 100644 --- a/embassy-net/src/device.rs +++ b/embassy-net/src/device.rs | |||
| @@ -21,6 +21,7 @@ pub trait Device { | |||
| 21 | fn register_waker(&mut self, waker: &Waker); | 21 | fn register_waker(&mut self, waker: &Waker); |
| 22 | fn capabilities(&mut self) -> DeviceCapabilities; | 22 | fn capabilities(&mut self) -> DeviceCapabilities; |
| 23 | fn link_state(&mut self) -> LinkState; | 23 | fn link_state(&mut self) -> LinkState; |
| 24 | fn ethernet_address(&mut self) -> [u8;6]; | ||
| 24 | } | 25 | } |
| 25 | 26 | ||
| 26 | pub struct DeviceAdapter { | 27 | pub struct DeviceAdapter { |
diff --git a/embassy-net/src/stack.rs b/embassy-net/src/stack.rs index d1dcb3bc9..8f63db971 100644 --- a/embassy-net/src/stack.rs +++ b/embassy-net/src/stack.rs | |||
| @@ -154,15 +154,18 @@ pub fn init(device: &'static mut dyn Device, configurator: &'static mut dyn Conf | |||
| 154 | routes: [None; 1], | 154 | routes: [None; 1], |
| 155 | }); | 155 | }); |
| 156 | 156 | ||
| 157 | let ethernet_addr = EthernetAddress([0x02, 0x02, 0x02, 0x02, 0x02, 0x02]); | ||
| 158 | |||
| 159 | let medium = device.capabilities().medium; | 157 | let medium = device.capabilities().medium; |
| 158 | let ethernet_addr = if medium == Medium::Ethernet { | ||
| 159 | device.ethernet_address() | ||
| 160 | } else { | ||
| 161 | [0, 0, 0, 0, 0, 0] | ||
| 162 | }; | ||
| 160 | 163 | ||
| 161 | let mut b = InterfaceBuilder::new(DeviceAdapter::new(device)); | 164 | let mut b = InterfaceBuilder::new(DeviceAdapter::new(device)); |
| 162 | b = b.ip_addrs(&mut res.addresses[..]); | 165 | b = b.ip_addrs(&mut res.addresses[..]); |
| 163 | 166 | ||
| 164 | if medium == Medium::Ethernet { | 167 | if medium == Medium::Ethernet { |
| 165 | b = b.ethernet_addr(ethernet_addr); | 168 | b = b.ethernet_addr(EthernetAddress(ethernet_addr)); |
| 166 | b = b.neighbor_cache(NeighborCache::new(&mut res.neighbor_cache[..])); | 169 | b = b.neighbor_cache(NeighborCache::new(&mut res.neighbor_cache[..])); |
| 167 | b = b.routes(Routes::new(&mut res.routes[..])); | 170 | b = b.routes(Routes::new(&mut res.routes[..])); |
| 168 | } | 171 | } |
