tunnel config

This commit is contained in:
2026-05-06 01:39:11 +03:00
parent 63b7db4936
commit 855fb71b4e
3 changed files with 37 additions and 7 deletions

View File

@@ -134,6 +134,7 @@ static nn_Exit ne_modemBullshit(nn_ModemRequest *req) {
return NN_OK;
}
if(req->action == NN_MODEM_SEND) {
req->send.strengthSent = req->modem->maxRange;
printf("Transmission from %s to %s (port %zu) of %zu bytes (%zu values)\n", req->localAddress, req->send.address == NULL ? "*" : req->send.address, req->send.port, req->send.contents->buflen, req->send.contents->valueCount);
return nn_pushModemMessage(C, req->localAddress, nn_getComputerAddress(C), req->send.port, 0, req->send.contents);
}
@@ -488,7 +489,7 @@ int main(int argc, char **argv) {
nn_setComponentHandler(ocelotCard, sandbox_handler);
nn_Component *dataCard = nn_createDataCard(u, NULL, &nn_defaultDataCards[2], NULL, ne_dataBullshit);
nn_Component *modem = nn_createModem(u, NULL, &nn_defaultWiredModem, NULL, ne_modemBullshit);
nn_Component *modem = nn_createModem(u, NULL, &nn_defaultWirelessModems[1], NULL, ne_modemBullshit);
char *eepromCode = (char *)minBIOS;
size_t eepromSize = strlen(minBIOS);

View File

@@ -6195,6 +6195,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_ENCODE64;
dreq.data = nn_tolstring(C, 0, &dreq.datalen);
if(dreq.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.trivialCost + dataCard.trivialCostByte * dreq.datalen);
e = state->handler(&dreq);
if(e) return e;
req->returnCount = 1;
@@ -6206,6 +6207,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_DECODE64;
dreq.data = nn_tolstring(C, 0, &dreq.datalen);
if(dreq.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.trivialCost + dataCard.trivialCostByte * dreq.datalen);
e = state->handler(&dreq);
if(e) return e;
req->returnCount = 1;
@@ -6217,6 +6219,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_DEFLATE;
dreq.data = nn_tolstring(C, 0, &dreq.datalen);
if(dreq.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.complexCost + dataCard.complexCostByte * dreq.datalen);
e = state->handler(&dreq);
if(e) return e;
req->returnCount = 1;
@@ -6228,6 +6231,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_INFLATE;
dreq.data = nn_tolstring(C, 0, &dreq.datalen);
if(dreq.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.complexCost + dataCard.complexCostByte * dreq.datalen);
e = state->handler(&dreq);
if(e) return e;
req->returnCount = 1;
@@ -6239,6 +6243,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_CRC32;
dreq.crc32.data = nn_tolstring(C, 0, &dreq.crc32.datalen);
if(dreq.crc32.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.trivialCost + dataCard.trivialCostByte * dreq.crc32.datalen);
e = state->handler(&dreq);
if(e) return e;
req->returnCount = 1;
@@ -6250,6 +6255,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_MD5;
dreq.md5.data = nn_tolstring(C, 0, &dreq.md5.datalen);
if(dreq.md5.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.simpleCost + dataCard.simpleCostByte * dreq.md5.datalen);
e = state->handler(&dreq);
if(e) return e;
req->returnCount = 1;
@@ -6261,6 +6267,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_SHA256;
dreq.sha256.data = nn_tolstring(C, 0, &dreq.sha256.datalen);
if(dreq.sha256.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.complexCost + dataCard.complexCostByte * dreq.sha256.datalen);
e = state->handler(&dreq);
if(e) return e;
req->returnCount = 1;
@@ -6274,6 +6281,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
n = 1;
}
if(n > dataCard.maxRandom) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.complexCost + dataCard.complexCostByte * n);
char *buf = nn_alloc(ctx, n);
dreq.action = NN_DATA_RANDOM;
dreq.randbuf.buf = buf;
@@ -6296,6 +6304,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_ENCRYPT;
dreq.encrypt.data = nn_tolstring(C, 0, &dreq.encrypt.datalen);
if(dreq.encrypt.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.simpleCost + dataCard.simpleCostByte * dreq.encrypt.datalen);
size_t len;
dreq.encrypt.key = nn_tolstring(C, 1, &len);
if(len != 16) {
@@ -6320,6 +6329,7 @@ static nn_Exit nn_dataHandler(nn_ComponentRequest *req) {
dreq.action = NN_DATA_ENCRYPT;
dreq.encrypt.data = nn_tolstring(C, 0, &dreq.encrypt.datalen);
if(dreq.encrypt.datalen > dataCard.limit) return NN_ELIMIT;
nn_removeEnergy(C, dataCard.simpleCost + dataCard.simpleCostByte * dreq.encrypt.datalen);
size_t len;
dreq.encrypt.key = nn_tolstring(C, 1, &len);
if(len != 16) {
@@ -6502,9 +6512,11 @@ static nn_Exit nn_modemHandler(nn_ComponentRequest *req) {
mreq.send.address = NULL;
mreq.send.port = port;
mreq.send.contents = &data;
mreq.send.strengthSent = 0;
e = state->handler(&mreq);
nn_dropNetworkContents(&data);
if(!e) {
nn_removeEnergy(C, state->modem.basePacketCost + state->modem.fullPacketCost * cost / state->modem.maxPacketSize + state->modem.costPerStrength * mreq.send.strengthSent);
req->returnCount = 1;
e = nn_pushbool(C, true);
}
@@ -6534,9 +6546,11 @@ static nn_Exit nn_modemHandler(nn_ComponentRequest *req) {
mreq.send.address = addr;
mreq.send.port = port;
mreq.send.contents = &data;
mreq.send.strengthSent = 0;
e = state->handler(&mreq);
nn_dropNetworkContents(&data);
if(!e) {
nn_removeEnergy(C, state->modem.basePacketCost + state->modem.fullPacketCost * cost / state->modem.maxPacketSize + state->modem.costPerStrength * mreq.send.strengthSent);
req->returnCount = 1;
e = nn_pushbool(C, true);
}
@@ -6599,10 +6613,11 @@ nn_Modem nn_defaultWiredModem = {
.maxPacketSize = 8192,
.maxOpenPorts = 16,
.isWired = true,
.basePacketCost = 0.5,
.fullPacketCost = 1,
.basePacketCost = 0.05,
.fullPacketCost = 0.1,
.costPerStrength = 0,
};
nn_Modem nn_defaultWirelessModems[2] = {
NN_INIT(nn_Modem) {
.maxRange = 16,
@@ -6610,8 +6625,8 @@ nn_Modem nn_defaultWirelessModems[2] = {
.maxPacketSize = 8192,
.maxOpenPorts = 16,
.isWired = true,
.basePacketCost = 1,
.fullPacketCost = 5,
.basePacketCost = 0.1,
.fullPacketCost = 0.5,
.costPerStrength = 0.05,
},
NN_INIT(nn_Modem) {
@@ -6620,8 +6635,15 @@ nn_Modem nn_defaultWirelessModems[2] = {
.maxPacketSize = 8192,
.maxOpenPorts = 16,
.isWired = true,
.basePacketCost = 2,
.fullPacketCost = 10,
.basePacketCost = 0.2,
.fullPacketCost = 1,
.costPerStrength = 0.05,
},
};
nn_Tunnel nn_defaultTunnel = {
.maxValues = 8,
.maxPacketSize = 8192,
.basePacketCost = 100,
.fullPacketCost = 256,
};

View File

@@ -1902,6 +1902,9 @@ typedef struct nn_ModemRequest {
// NULL for broadcast
const char *address;
size_t port;
// The signal strength it was sent at
// This is an *OUT* field, it is assumed the handler keeps track of the correct strength
size_t strengthSent;
} send;
// for getStrength, setStrength.
size_t strength;
@@ -1927,6 +1930,10 @@ typedef struct nn_Tunnel {
size_t maxValues;
// maximum logical packet size. Note that the encoding is more efficient than the packet size algorithm estimates
size_t maxPacketSize;
// minimum energy cost of 1 transmission
double basePacketCost;
// extra energy cost of 1 full transmission
double fullPacketCost;
} nn_Tunnel;
extern nn_Tunnel nn_defaultTunnel;