diff --git a/src/core/network.ts b/src/core/network.ts index ae0c6cb..1b36cc8 100644 --- a/src/core/network.ts +++ b/src/core/network.ts @@ -285,8 +285,8 @@ export class NetworkHub { } connect(v1: number, v2: number) { - const node1 = this.Nodes.value.find(n => n.id === v1) - const node2 = this.Nodes.value.find(n => n.id === v2) + const node1 = this.Nodes.value.find((n) => n.id === v1) + const node2 = this.Nodes.value.find((n) => n.id === v2) if (!node1 || !node2) { console.error('Connection error: node(s) not found.') diff --git a/src/core/nodes/end_system.ts b/src/core/nodes/end_system.ts index dfaf799..e0cd1c8 100644 --- a/src/core/nodes/end_system.ts +++ b/src/core/nodes/end_system.ts @@ -1,4 +1,4 @@ -import { Node } from '../node' +import { Node } from './node' import { PKT_TYPE, type Message, diff --git a/src/core/nodes/five_g_gnb.ts b/src/core/nodes/five_g_gnb.ts index e34d315..5052722 100644 --- a/src/core/nodes/five_g_gnb.ts +++ b/src/core/nodes/five_g_gnb.ts @@ -1,4 +1,4 @@ -import { Node } from '../node' +import { Node } from './node' import { PKT_TYPE, type Message, diff --git a/src/core/nodes/five_g_ue.ts b/src/core/nodes/five_g_ue.ts index b320acf..c760da2 100644 --- a/src/core/nodes/five_g_ue.ts +++ b/src/core/nodes/five_g_ue.ts @@ -1,4 +1,4 @@ -import { Node } from '../node' +import { Node } from './node' import { PKT_TYPE, type Message, diff --git a/src/core/node.ts b/src/core/nodes/node.ts similarity index 93% rename from src/core/node.ts rename to src/core/nodes/node.ts index e2b6ac5..7ae7925 100644 --- a/src/core/node.ts +++ b/src/core/nodes/node.ts @@ -1,4 +1,4 @@ -import { type Message, type MsgHandler, type Packet, type PktHandler } from './typedefs' +import { type Message, type MsgHandler, type Packet, type PktHandler, type RoutingTable } from '../typedefs' export class Node { id: number = 0 @@ -8,7 +8,7 @@ export class Node { rx_cnt: number = 0 queue: Packet[] = [] ASN: number = 0 - routingTable: { [dst: number]: number } = {} + routingTable: RoutingTable = {} msgHandlers: { [type: number]: MsgHandler } = {} pktHandlers: { [type: number]: PktHandler } = {} diff --git a/src/core/nodes/tsch.ts b/src/core/nodes/tsch.ts index 70f8e52..d8f423a 100644 --- a/src/core/nodes/tsch.ts +++ b/src/core/nodes/tsch.ts @@ -1,4 +1,4 @@ -import { Node } from '../node' +import { Node } from './node' import { PKT_TYPE, type Message, diff --git a/src/core/nodes/tsn.ts b/src/core/nodes/tsn.ts index 4c0167c..008bfc1 100644 --- a/src/core/nodes/tsn.ts +++ b/src/core/nodes/tsn.ts @@ -1,4 +1,4 @@ -import { Node } from '../node' +import { Node } from './node' import { PKT_TYPE, type Message, diff --git a/src/core/typedefs.ts b/src/core/typedefs.ts deleted file mode 100644 index 1af2743..0000000 --- a/src/core/typedefs.ts +++ /dev/null @@ -1,142 +0,0 @@ -// enums are all captital and underscore, types are camel case - -export interface Config { - seed: number - num_nodes: number - grid_size: number - tx_range: number -} - -export enum NODE_TYPE { - TSCH, - TSN, - FIVE_G_GNB, - FIVE_G_UE, - END_SYSTEM_SERVER = 11, - END_SYSTEM_SENSOR_CAMERA, - END_SYSTEM_SENSOR_TEMP, - END_SYSTEM_SENSOR_PRESSURE, - END_SYSTEM_SENSOR_HUMIDITY, - END_SYSTEM_ACTUATOR_ROBOTIC_ARM, - END_SYSTEM_ACTUATOR_PNEUMATIC -} - -export const NODE_TYPE_DISPLAY_NAME = <{ [name: string]: string }>{ - [NODE_TYPE.TSCH]: 'TSCH Node', - [NODE_TYPE.TSN]: 'TSN Bridge', - [NODE_TYPE.FIVE_G_GNB]: '5G gNB', - [NODE_TYPE.FIVE_G_UE]: '5G UE', - [NODE_TYPE.END_SYSTEM_SERVER]: 'Edge Server', - [NODE_TYPE.END_SYSTEM_SENSOR_CAMERA]: 'Camera', - [NODE_TYPE.END_SYSTEM_SENSOR_TEMP]: 'Temperature Sensor', - [NODE_TYPE.END_SYSTEM_SENSOR_PRESSURE]: 'Pressure Sensor', - [NODE_TYPE.END_SYSTEM_SENSOR_HUMIDITY]: 'Humidity Sensor', - [NODE_TYPE.END_SYSTEM_ACTUATOR_ROBOTIC_ARM]: 'Robotic Arm', - [NODE_TYPE.END_SYSTEM_ACTUATOR_PNEUMATIC]: 'Pneumatic Actuator' -} - -export interface Node { - id: number - type: number - pos: [number, number] - neighbors: number[] - tx_cnt: number - rx_cnt: number - w: Worker | undefined -} - -export interface Link { - // undirected for visualization - uid: number // cantor pairing, uid=0.5*(v1+v2)*(v1+v2+1)+v2 - v1: number - v2: number - type: number -} - -export enum LINK_TYPE { - WIRED, - WIRELESS -} - -export interface Flow { - id: number - e2e_src: number - e2e_dst: number - deadline: number - period: number - workload: number - path: number[] // id's of all nodes in path - editing: boolean // whether or not the user can edit in FlowsPanel -} - -// Packet is transfered among nodes, at data-link layer -export interface Packet { - uid: number - protocol: string - type: number - e2e_src: number - e2e_dst: number - mac_src: number - mac_dst: number - asn: number - len: number - payload: any - - // for display on packet sniffer - id: number - children: any -} - -export enum PKT_TYPE { - DATA -} - -export const PROTOCOL_TYPE = <{ [name: string]: string }>{ - TSCH: '802.15.4', - TSN: '802.1', - FIVE_G: '5G NR' -} - -export enum ADDR { - BROADCAST = -1 -} - -// Message is used for direct communication (debug, cmd, stats) between nodes and controller -export interface Message { - type: number - id: number // node id - payload: any -} - -export enum MSG_TYPE { - INIT, - ASN, - DONE, // finished all activities of the current slot - ROUTING, - FLOW, // install periodic flow - STAT -} - -export interface InitMsgPayload { - id: number - neighbors: number[] -} - -export interface ASNMsgPayload { - asn: number -} - -export interface RoutingMsgPayload { - [dst: number]: number -} - -export interface FlowMsgPayload { - flows: Flow[] -} - -export type MsgHandler = (msg: Message) => void -export type PktHandler = (pkt: Packet) => void - -export interface RoutingGraph { - [id: number]: number[] -} diff --git a/src/core/typedefs/config.ts b/src/core/typedefs/config.ts new file mode 100644 index 0000000..ba2661f --- /dev/null +++ b/src/core/typedefs/config.ts @@ -0,0 +1,6 @@ +export interface Config { + seed: number + num_nodes: number + grid_size: number + tx_range: number +} diff --git a/src/core/typedefs/flow.ts b/src/core/typedefs/flow.ts new file mode 100644 index 0000000..324ddb4 --- /dev/null +++ b/src/core/typedefs/flow.ts @@ -0,0 +1,10 @@ +export interface Flow { + id: number + e2e_src: number + e2e_dst: number + deadline: number + period: number + workload: number + path: number[] // id's of all nodes in path + editing: boolean // whether or not the user can edit in FlowsPanel +} diff --git a/src/core/typedefs/index.ts b/src/core/typedefs/index.ts new file mode 100644 index 0000000..1f19de6 --- /dev/null +++ b/src/core/typedefs/index.ts @@ -0,0 +1,14 @@ +export * from './config' +export * from './node' +export * from './message' +export * from './packet' +export * from './link' +export * from './routing' +export * from './flow' +export * from './schedule' + +export const PROTOCOL_TYPE = <{ [name: string]: string }>{ + TSCH: '802.15.4', + TSN: '802.1', + FIVE_G: '5G NR' +} diff --git a/src/core/typedefs/link.ts b/src/core/typedefs/link.ts new file mode 100644 index 0000000..92b9fbb --- /dev/null +++ b/src/core/typedefs/link.ts @@ -0,0 +1,12 @@ +export interface Link { + // undirected for visualization + uid: number // cantor pairing, uid=0.5*(v1+v2)*(v1+v2+1)+v2 + v1: number + v2: number + type: number +} + +export enum LINK_TYPE { + WIRED, + WIRELESS +} diff --git a/src/core/typedefs/message.ts b/src/core/typedefs/message.ts new file mode 100644 index 0000000..ab006d3 --- /dev/null +++ b/src/core/typedefs/message.ts @@ -0,0 +1,36 @@ +import type { Flow } from './flow' + +// Message is used for direct communication (debug, cmd, stats) between nodes and controller +export interface Message { + type: number + id: number // node id + payload: any +} + +export type MsgHandler = (msg: Message) => void + +export enum MSG_TYPE { + INIT, + ASN, + DONE, // finished all activities of the current slot + ROUTING, + FLOW, // install periodic flow + STAT +} + +export interface InitMsgPayload { + id: number + neighbors: number[] +} + +export interface ASNMsgPayload { + asn: number +} + +export interface RoutingMsgPayload { + [dst: number]: number +} + +export interface FlowMsgPayload { + flows: Flow[] +} diff --git a/src/core/typedefs/node.ts b/src/core/typedefs/node.ts new file mode 100644 index 0000000..5b7fd03 --- /dev/null +++ b/src/core/typedefs/node.ts @@ -0,0 +1,37 @@ +export enum NODE_TYPE { + TSCH, + TSN, + FIVE_G_GNB, + FIVE_G_UE, + END_SYSTEM_SERVER = 11, + END_SYSTEM_SENSOR_CAMERA, + END_SYSTEM_SENSOR_TEMP, + END_SYSTEM_SENSOR_PRESSURE, + END_SYSTEM_SENSOR_HUMIDITY, + END_SYSTEM_ACTUATOR_ROBOTIC_ARM, + END_SYSTEM_ACTUATOR_PNEUMATIC +} + +export const NODE_TYPE_DISPLAY_NAME = <{ [name: string]: string }>{ + [NODE_TYPE.TSCH]: 'TSCH Node', + [NODE_TYPE.TSN]: 'TSN Bridge', + [NODE_TYPE.FIVE_G_GNB]: '5G gNB', + [NODE_TYPE.FIVE_G_UE]: '5G UE', + [NODE_TYPE.END_SYSTEM_SERVER]: 'Edge Server', + [NODE_TYPE.END_SYSTEM_SENSOR_CAMERA]: 'Camera', + [NODE_TYPE.END_SYSTEM_SENSOR_TEMP]: 'Temperature Sensor', + [NODE_TYPE.END_SYSTEM_SENSOR_PRESSURE]: 'Pressure Sensor', + [NODE_TYPE.END_SYSTEM_SENSOR_HUMIDITY]: 'Humidity Sensor', + [NODE_TYPE.END_SYSTEM_ACTUATOR_ROBOTIC_ARM]: 'Robotic Arm', + [NODE_TYPE.END_SYSTEM_ACTUATOR_PNEUMATIC]: 'Pneumatic Actuator' +} + +export interface Node { + id: number + type: number + pos: [number, number] + neighbors: number[] + tx_cnt: number + rx_cnt: number + w: Worker | undefined +} diff --git a/src/core/typedefs/packet.ts b/src/core/typedefs/packet.ts new file mode 100644 index 0000000..d074721 --- /dev/null +++ b/src/core/typedefs/packet.ts @@ -0,0 +1,23 @@ +// Packet is transfered among nodes, at data-link layer +export interface Packet { + uid: number + protocol: string + type: number + e2e_src: number + e2e_dst: number + mac_src: number + mac_dst: number + asn: number + len: number + payload: any + + // for display on packet sniffer + id: number + children: any +} + +export type PktHandler = (pkt: Packet) => void + +export enum PKT_TYPE { + DATA +} diff --git a/src/core/typedefs/routing.ts b/src/core/typedefs/routing.ts new file mode 100644 index 0000000..65b5a45 --- /dev/null +++ b/src/core/typedefs/routing.ts @@ -0,0 +1,11 @@ +export interface RoutingGraph { + [id: number]: number[] +} + +export interface RoutingTable { + [id: number]: number +} + +export enum ADDR { + BROADCAST = -1 +} diff --git a/src/core/typedefs/schedule.ts b/src/core/typedefs/schedule.ts new file mode 100644 index 0000000..c47bd00 --- /dev/null +++ b/src/core/typedefs/schedule.ts @@ -0,0 +1,15 @@ +// the global network schedule +export interface Cell { + slot: number + type: number + mac_src: number + mac_dst: number + flow_id: number + flow_k: number + flow_h: number +} + +export enum CELL_TYPE { + DATA, + MGMT +} diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index afd241e..b0ecf68 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -30,8 +30,6 @@ import EventLogs from '@/components/EventLogs.vue' - +