diff --git a/candm.h b/candm.h index 08e0cc5..b1a191d 100644 --- a/candm.h +++ b/candm.h @@ -116,6 +116,10 @@ typedef struct { pktlength.c, to get the number of bytes that ought to be transmitted for each packet type. */ +typedef struct { + int32_t EOR; +} REQ_Null; + typedef struct { IPAddr mask; IPAddr address; @@ -215,19 +219,11 @@ typedef struct { int32_t EOR; } REQ_Manual; -typedef struct { - int32_t EOR; -} REQ_N_Sources; - typedef struct { int32_t index; int32_t EOR; } REQ_Source_Data; -typedef struct { - int32_t EOR; -} REQ_Rekey; - typedef struct { IPAddr ip; int32_t subnet_bits; @@ -264,10 +260,6 @@ typedef struct { int32_t EOR; } REQ_Del_Source; -typedef struct { - int32_t EOR; -} REQ_WriteRtc; - typedef struct { Float dfreq; int32_t EOR; @@ -279,27 +271,11 @@ typedef struct { int32_t EOR; } REQ_Doffset; -typedef struct { - int32_t EOR; -} REQ_Tracking; - typedef struct { uint32_t index; int32_t EOR; } REQ_Sourcestats; -typedef struct { - int32_t EOR; -} REQ_RTCReport; - -typedef struct { - int32_t EOR; -} REQ_TrimRTC; - -typedef struct { - int32_t EOR; -} REQ_CycleLogs; - /* This is based on the response size rather than the request size */ #define MAX_CLIENT_ACCESSES 8 @@ -310,27 +286,11 @@ typedef struct { int32_t EOR; } REQ_ClientAccessesByIndex; -typedef struct { - int32_t EOR; -} REQ_ManualList; - typedef struct { int32_t index; int32_t EOR; } REQ_ManualDelete; -typedef struct { - int32_t EOR; -} REQ_MakeStep; - -typedef struct { - int32_t EOR; -} REQ_Activity; - -typedef struct { - int32_t EOR; -} REQ_Reselect; - typedef struct { Float distance; int32_t EOR; @@ -398,6 +358,7 @@ typedef struct { uint32_t token; /* Command token (to prevent replay attack) */ union { + REQ_Null null; REQ_Online online; REQ_Offline offline; REQ_Burst burst; @@ -415,27 +376,16 @@ typedef struct { REQ_Settime settime; REQ_Local local; REQ_Manual manual; - REQ_N_Sources n_sources; REQ_Source_Data source_data; - REQ_Rekey rekey; REQ_Allow_Deny allow_deny; REQ_Ac_Check ac_check; REQ_NTP_Source ntp_source; REQ_Del_Source del_source; - REQ_WriteRtc writertc; REQ_Dfreq dfreq; REQ_Doffset doffset; - REQ_Tracking tracking; REQ_Sourcestats sourcestats; - REQ_RTCReport rtcreport; - REQ_TrimRTC trimrtc; - REQ_CycleLogs cyclelogs; REQ_ClientAccessesByIndex client_accesses_by_index; - REQ_ManualList manual_list; REQ_ManualDelete manual_delete; - REQ_MakeStep make_step; - REQ_Activity activity; - REQ_Reselect reselect; REQ_ReselectDistance reselect_distance; } data; /* Command specific parameters */ diff --git a/pktlength.c b/pktlength.c index 2bd03b0..3b12517 100644 --- a/pktlength.c +++ b/pktlength.c @@ -44,9 +44,8 @@ command_unpadded_length(CMD_Request *r) return 0; } else { switch (type) { - case REQ_NULL: - return offsetof(CMD_Request, data); + return offsetof(CMD_Request, data.null.EOR); case REQ_ONLINE: return offsetof(CMD_Request, data.online.EOR); case REQ_OFFLINE: @@ -78,11 +77,11 @@ command_unpadded_length(CMD_Request *r) case REQ_MANUAL : return offsetof(CMD_Request, data.manual.EOR); case REQ_N_SOURCES : - return offsetof(CMD_Request, data.n_sources.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_SOURCE_DATA : return offsetof(CMD_Request, data.source_data.EOR); case REQ_REKEY : - return offsetof(CMD_Request, data.rekey.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_ALLOW : return offsetof(CMD_Request, data.allow_deny.EOR); case REQ_ALLOWALL : @@ -110,21 +109,21 @@ command_unpadded_length(CMD_Request *r) case REQ_DEL_SOURCE : return offsetof(CMD_Request, data.del_source.EOR); case REQ_WRITERTC : - return offsetof(CMD_Request, data.writertc.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_DFREQ : return offsetof(CMD_Request, data.dfreq.EOR); case REQ_DOFFSET : return offsetof(CMD_Request, data.doffset.EOR); case REQ_TRACKING : - return offsetof(CMD_Request, data.tracking.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_SOURCESTATS : return offsetof(CMD_Request, data.sourcestats.EOR); case REQ_RTCREPORT : - return offsetof(CMD_Request, data.rtcreport.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_TRIMRTC : - return offsetof(CMD_Request, data.trimrtc.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_CYCLELOGS : - return offsetof(CMD_Request, data.cyclelogs.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_SUBNETS_ACCESSED : case REQ_CLIENT_ACCESSES: /* No longer supported */ @@ -132,15 +131,15 @@ command_unpadded_length(CMD_Request *r) case REQ_CLIENT_ACCESSES_BY_INDEX: return offsetof(CMD_Request, data.client_accesses_by_index.EOR); case REQ_MANUAL_LIST: - return offsetof(CMD_Request, data.manual_list.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_MANUAL_DELETE: return offsetof(CMD_Request, data.manual_delete.EOR); case REQ_MAKESTEP: - return offsetof(CMD_Request, data.make_step.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_ACTIVITY: - return offsetof(CMD_Request, data.activity.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_RESELECT: - return offsetof(CMD_Request, data.reselect.EOR); + return offsetof(CMD_Request, data.null.EOR); case REQ_RESELECTDISTANCE: return offsetof(CMD_Request, data.reselect_distance.EOR); case REQ_MODIFY_MINSTRATUM: @@ -228,11 +227,11 @@ PKL_CommandPaddingLength(CMD_Request *r) case REQ_MANUAL: return PADDING_LENGTH(data.manual.EOR, data.null.EOR); case REQ_N_SOURCES: - return PADDING_LENGTH(data.n_sources.EOR, data.n_sources.EOR); + return PADDING_LENGTH(data.null.EOR, data.n_sources.EOR); case REQ_SOURCE_DATA: return PADDING_LENGTH(data.source_data.EOR, data.source_data.EOR); case REQ_REKEY: - return PADDING_LENGTH(data.rekey.EOR, data.null.EOR); + return PADDING_LENGTH(data.null.EOR, data.null.EOR); case REQ_ALLOW: return PADDING_LENGTH(data.allow_deny.EOR, data.null.EOR); case REQ_ALLOWALL: @@ -260,21 +259,21 @@ PKL_CommandPaddingLength(CMD_Request *r) case REQ_DEL_SOURCE: return PADDING_LENGTH(data.del_source.EOR, data.null.EOR); case REQ_WRITERTC: - return PADDING_LENGTH(data.writertc.EOR, data.null.EOR); + return PADDING_LENGTH(data.null.EOR, data.null.EOR); case REQ_DFREQ: return PADDING_LENGTH(data.dfreq.EOR, data.null.EOR); case REQ_DOFFSET: return PADDING_LENGTH(data.doffset.EOR, data.null.EOR); case REQ_TRACKING: - return PADDING_LENGTH(data.tracking.EOR, data.tracking.EOR); + return PADDING_LENGTH(data.null.EOR, data.tracking.EOR); case REQ_SOURCESTATS: return PADDING_LENGTH(data.sourcestats.EOR, data.sourcestats.EOR); case REQ_RTCREPORT: - return PADDING_LENGTH(data.rtcreport.EOR, data.rtc.EOR); + return PADDING_LENGTH(data.null.EOR, data.rtc.EOR); case REQ_TRIMRTC: - return PADDING_LENGTH(data.trimrtc.EOR, data.null.EOR); + return PADDING_LENGTH(data.null.EOR, data.null.EOR); case REQ_CYCLELOGS: - return PADDING_LENGTH(data.cyclelogs.EOR, data.null.EOR); + return PADDING_LENGTH(data.null.EOR, data.null.EOR); case REQ_SUBNETS_ACCESSED: case REQ_CLIENT_ACCESSES: /* No longer supported */ @@ -282,15 +281,15 @@ PKL_CommandPaddingLength(CMD_Request *r) case REQ_CLIENT_ACCESSES_BY_INDEX: return PADDING_LENGTH(data.client_accesses_by_index.EOR, data.client_accesses_by_index.EOR); case REQ_MANUAL_LIST: - return PADDING_LENGTH(data.manual_list.EOR, data.manual_list.EOR); + return PADDING_LENGTH(data.null.EOR, data.manual_list.EOR); case REQ_MANUAL_DELETE: return PADDING_LENGTH(data.manual_delete.EOR, data.null.EOR); case REQ_MAKESTEP: - return PADDING_LENGTH(data.make_step.EOR, data.null.EOR); + return PADDING_LENGTH(data.null.EOR, data.null.EOR); case REQ_ACTIVITY: - return PADDING_LENGTH(data.activity.EOR, data.activity.EOR); + return PADDING_LENGTH(data.null.EOR, data.activity.EOR); case REQ_RESELECT: - return PADDING_LENGTH(data.reselect.EOR, data.null.EOR); + return PADDING_LENGTH(data.null.EOR, data.null.EOR); case REQ_RESELECTDISTANCE: return PADDING_LENGTH(data.reselect_distance.EOR, data.null.EOR); case REQ_MODIFY_MINSTRATUM: