6 #include "NetRemoteConfiguration.hpp"
11 void NetRemoteConfiguration::processFrame(NetDefs::FRAME& frame,
int len) {
12 PKT* pkt = (PKT*) frame.types.udp.data;
14 if ((len < (
int)
sizeof(HEADER)) || ((pkt->generic.hdr.macAddr != NetDefs::MAC_BROADCAST) && (pkt->generic.hdr.macAddr != Net::sMacAddr))
15 || (pkt->generic.hdr.key != KEY)) {
16 Net::freeFrame(frame);
20 switch (pkt->generic.hdr.cmd) {
22 int8_t
id = pkt->generic.hdr.id;
23 NetDefs::MAC_ADDR remoteMacAddr = frame.types.mac.macHeader.srcAddr;
24 NetDefs::IP_ADDR remoteIpAddr = frame.types.ip.ipHeader.srcAddr;
25 uint16_t remotePort = frame.types.udp.udpHeader.srcPort;
26 Net::freeFrame(frame);
28 NetDefs::FRAME * sendFrame = Net::allocFrame(
29 sizeof(NetDefs::MAC_HEADER) +
sizeof(NetDefs::IP_HEADER) +
sizeof(NetDefs::UDP_HEADER) +
sizeof(HEADER) +
sizeof(NetDefs::NET_CONFIG));
33 PKT* sendPkt = (PKT*) sendFrame->types.udp.data;
34 sendPkt->writeConfig.hdr.cmd = READ_CONFIG_REPLY;
35 sendPkt->writeConfig.hdr.id =
id;
36 sendPkt->generic.hdr.macAddr = Net::sMacAddr;
37 sendPkt->writeConfig.hdr.key = KEY;
38 sendPkt->writeConfig.hdr.len =
sizeof(NetDefs::NET_CONFIG);
39 sendPkt->writeConfig.config = Net::sConfig;
40 NetUdp::putHeader(*sendFrame, remoteMacAddr, remoteIpAddr, NET_CFG_REMOTE_CONFIGURATION_PORT, remotePort,
41 sizeof(HEADER) +
sizeof(NetDefs::NET_CONFIG));
42 NetUdp::flush(*sendFrame,
sizeof(HEADER) +
sizeof(NetDefs::NET_CONFIG),
true);
46 pkt->generic.hdr.cmd = WRITE_CONFIG_REPLY;
47 Net::storeConfig(pkt->writeConfig.config);
48 Net::sConfig = pkt->writeConfig.config;
49 sendReply(frame, pkt);
53 pkt->generic.hdr.cmd = WRITE_MAC_REPLY;
54 Net::storeMac(pkt->writeMac.macAddr);
55 Net::sMacAddr = pkt->writeMac.macAddr;
56 sendReply(frame, pkt);
60 Net::freeFrame(frame);
64 void NetRemoteConfiguration::sendReply(NetDefs::FRAME& frame, PKT* pkt) {
65 pkt->generic.hdr.macAddr = Net::sMacAddr;
66 pkt->generic.hdr.len = 0;
67 NetUdp::putHeader(frame, frame.types.mac.macHeader.srcAddr, frame.types.ip.ipHeader.srcAddr, NET_CFG_REMOTE_CONFIGURATION_PORT,
68 frame.types.udp.udpHeader.srcPort,
sizeof(HEADER));
69 NetUdp::flush(frame,
sizeof(HEADER),
true);