WSF
WsfCyberEngagement.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2016 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFCYBERENGAGEMENT_HPP
13#define WSFCYBERENGAGEMENT_HPP
14
15#include "wsf_cyber_export.h"
16
17#include <limits>
18
19#include "UtCloneablePtr.hpp"
20#include "UtScriptAccessible.hpp"
21#include "UtScriptBasicTypes.hpp"
22#include "UtScriptClass.hpp"
23#include "WsfCyberRandom.hpp"
24class WsfPlatform;
25class WsfSimulation;
26
27namespace wsf
28{
29namespace cyber
30{
31class Attack;
32class Protect;
33class Constraint;
34
36class WSF_CYBER_EXPORT Engagement : public UtScriptAccessible
37{
38public:
47
55
57 Engagement(std::string aAttackingPlatform,
58 std::string aVictimPlatform,
59 std::string aNamedAttack,
60 WsfSimulation& aSimulation,
61 size_t aKey);
62
63 virtual ~Engagement();
64
65 Engagement(const Engagement& aSrc) = delete;
66 Engagement(Engagement&& aSrc) = default;
67 const Engagement& operator=(const Engagement& aRhs) = delete;
68
69 const char* GetScriptClassName() const override { return "WsfCyberEngagement"; }
70
72
73 const std::string& GetAttacker() const { return mAttacker; }
74 size_t GetAttackerIndex() const { return mAttackerIndex; }
75 const std::string& GetVictim() const { return mVictim; }
76 size_t GetVictimIndex() const { return mVictimIndex; }
77 const std::string& GetAttackType() const { return mNamedAttack; }
78 size_t GetKey() const { return mKey; }
79
80 Attack* GetAttack() const { return mAttackPtr; }
81 double GetDuration() const { return mDuration; }
82 double GetAttackStartTime() const { return mTimeAttackStart; }
83 double GetAttackSuccessThreshold() const { return mAttackSuccessThreshold; }
84 double GetAttackDraw() const { return mAttackDraw; }
85 double GetStatusReportThreshold() const { return mStatusReportThreshold; }
86 double GetStatusReportDraw() const { return mStatusReportDraw; }
87
90 bool GetStatusReportSuccess() const;
91 double GetTimeAttackDiscovered() const { return mTimeAttackDetection; }
92 double GetAttackDetectionThreshold() const { return mAttackDetectionThreshold; }
93 double GetAttackDetectionDraw() const { return mAttackDetectionDraw; }
94 double GetAttackAttributionThreshold() const { return mAttackAttributionThreshold; }
95 double GetAttackAttributionDraw() const { return mAttackAttributionDraw; }
96 double GetTimeAttackRecovery() const { return mTimeAttackRecovery; }
97 bool GetRecovery() const { return mRecover; }
98 double GetScanStartTime() const { return mTimeScanStart; }
99 double GetScanDetectionThreshold() const { return mScanDetectionThreshold; }
100 double GetScanDetectionDraw() const { return mScanDetectionDraw; }
101 double GetScanAttributionThreshold() const { return mScanAttributionThreshold; }
102 double GetScanAttributionDraw() const { return mScanAttributionDraw; }
103 double GetScanDelayTime() const { return mTimeScanDelay; }
104 double GetDeliveryDelayTime() const { return mTimeDeliveryDelay; }
105 bool GetScanSuccess() const { return mScanSuccess; }
106 bool GetAttackInProgress() const { return mAttackInProgress; }
107 bool GetAttackSuccess() const { return mAttackSuccess; }
108 const std::vector<std::string>& GetAttackEffects() const { return mAttackEffectTypes; }
109 double GetAttackDetectionDelayTime() const { return mTimeAttackDetectionDelay; }
110 double GetAttackRecoveryDelayTime() const { return mTimeAttackRecoveryDelay; }
111 double GetImmunityThreshold() const { return mImmunityThreshold; }
112 double GetImmunityDraw() const { return mImmunityDraw; }
113
116 Protect* GetUsedProtection() { return mProtectTypePtr; }
118
120
121 CyberAttackFailure GetAttackFailureReason() const { return mAttackFailure; }
122 CyberScanFailure GetScanFailureReason() const { return mScanFailure; }
124
128
129 void SetAttackFailureReason(CyberAttackFailure aAttackFailure) { mAttackFailure = aAttackFailure; }
130 void SetScanFailureReason(CyberScanFailure aScanFailure) { mScanFailure = aScanFailure; }
132
134
135 void SetAttackStartTime();
136 void SetScanStartTime();
137 void SetTimeAttackDiscovered();
138 void SetTimeAttackRecovery();
139
140 void SetScanSuccess(bool aSuccess) { mScanSuccess = aSuccess; }
141 void SetAttackInProgress(bool aInProgress) { mAttackInProgress = aInProgress; }
142 void SetAttackSuccess(bool aSuccess) { mAttackSuccess = aSuccess; }
144
151 bool IsVictimImmune() const;
152
157 bool Draw(random::ProbabilityType aProbabilityType);
158
163 virtual void Reset(bool aScanReset = false);
164
167 void ReleaseAttackerConstraints();
168
172 bool MeetsAttackerConstraints();
173
178 bool MakeConstraintReservations();
179
182 bool ExistingConstraintReservations();
183
184 WsfSimulation& GetSimulation() const { return mSimulation; }
185
186private:
194 void SetDefiningCyberObject();
195
200 void SetInitialValues();
201
202 std::string mAttacker{};
203 size_t mAttackerIndex{0U};
204 std::string mVictim{};
205 size_t mVictimIndex{0U};
206 std::string mNamedAttack{};
207 size_t mKey{0U};
208
210 double mTimeAttackStart{std::numeric_limits<double>::max()};
211 double mDuration{-1.0};
212 double mAttackSuccessThreshold{1.0};
213 double mAttackDraw{-1.0};
214 double mCyberResourceUsage{0.0};
215 double mStatusReportThreshold{1.0};
216 double mStatusReportDraw{-1.0};
217 double mTimeAttackDetection{-1.0};
218 double mTimeAttackDetectionDelay{std::numeric_limits<double>::max()};
219 double mAttackDetectionThreshold{0.0};
220 double mAttackDetectionDraw{-1.0};
221 double mAttackAttributionThreshold{0.0};
222 double mAttackAttributionDraw{-1.0};
223 double mTimeAttackRecovery{-1.0};
224 double mTimeAttackRecoveryDelay{std::numeric_limits<double>::max()};
225 bool mRecover{false};
226 CyberAttackFailure mAttackFailure{cATTACK_NONE};
227 double mTimeDeliveryDelay{0.0};
228 bool mAttackInProgress{false};
229 bool mAttackSuccess{false};
230
232 double mTimeScanStart{std::numeric_limits<double>::max()};
233 double mScanDetectionThreshold{0.0};
234 double mScanDetectionDraw{-1.0};
235 double mScanAttributionThreshold{0.0};
236 double mScanAttributionDraw{-1.0};
237 CyberScanFailure mScanFailure{cSCAN_NONE};
238 double mTimeScanDelay{0.0};
239 bool mScanSuccess{false};
240
242 double mImmunityThreshold{0.0};
243 double mImmunityDraw{-1.0};
244
245 bool mUseProtectDefinition{false};
246
247 WsfSimulation& mSimulation;
248 Protect* mProtectTypePtr{nullptr};
249 Constraint* mConstraintPtr{nullptr};
250 std::vector<std::string> mAttackEffectTypes{};
251
256 UtCloneablePtr<Attack> mAttackPtr{nullptr};
257};
258
259
261class WSF_CYBER_EXPORT ScriptEngagement : public UtScriptClass
262{
263public:
264 ScriptEngagement(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
265
266
268
270 UT_DECLARE_SCRIPT_METHOD(AttackerPlatform);
275
277
278 UT_DECLARE_SCRIPT_METHOD(TimeAttackInitiated);
279 UT_DECLARE_SCRIPT_METHOD(AttackSuccessThreshold);
280 UT_DECLARE_SCRIPT_METHOD(AttackSuccessDraw);
281 UT_DECLARE_SCRIPT_METHOD(StatusReportThreshold);
282 UT_DECLARE_SCRIPT_METHOD(StatusReportDraw);
283 UT_DECLARE_SCRIPT_METHOD(TimeAttackDiscovered);
284 UT_DECLARE_SCRIPT_METHOD(AttackDetectionThreshold);
285 UT_DECLARE_SCRIPT_METHOD(AttackDetectionDraw);
286 UT_DECLARE_SCRIPT_METHOD(AttackAttributionThreshold);
287 UT_DECLARE_SCRIPT_METHOD(AttackAttributionDraw);
288 UT_DECLARE_SCRIPT_METHOD(TimeAttackRecovery);
290 UT_DECLARE_SCRIPT_METHOD(AttackDeliveryDelayTime);
291 UT_DECLARE_SCRIPT_METHOD(AttackDetectionDelayTime);
292 UT_DECLARE_SCRIPT_METHOD(AttackRecoveryDelayTime);
294 UT_DECLARE_SCRIPT_METHOD(AttackInProgress);
295 UT_DECLARE_SCRIPT_METHOD(AttackFailureReason);
297
299
300 UT_DECLARE_SCRIPT_METHOD(TimeScanInitiated);
301 UT_DECLARE_SCRIPT_METHOD(ScanDetectionThreshold);
302 UT_DECLARE_SCRIPT_METHOD(ScanDetectionDraw);
303 UT_DECLARE_SCRIPT_METHOD(ScanAttributionThreshold);
304 UT_DECLARE_SCRIPT_METHOD(ScanAttributionDraw);
308 UT_DECLARE_SCRIPT_METHOD(ScanFailureReason);
310};
311
312} // namespace cyber
313
314} // namespace wsf
315
316#endif
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfCyberAttack.hpp:55
Definition WsfCyberConstraint.hpp:39
A class that represents the cyber engagements between two platforms.
Definition WsfCyberEngagement.hpp:37
double GetStatusReportDraw() const
Definition WsfCyberEngagement.hpp:86
void SetAttackInProgress(bool aInProgress)
Definition WsfCyberEngagement.hpp:141
double GetScanDetectionThreshold() const
Definition WsfCyberEngagement.hpp:99
double GetAttackAttributionThreshold() const
Definition WsfCyberEngagement.hpp:94
void SetAttackFailureReason(CyberAttackFailure aAttackFailure)
Definition WsfCyberEngagement.hpp:129
size_t GetKey() const
Definition WsfCyberEngagement.hpp:78
bool GetAttackInProgress() const
Definition WsfCyberEngagement.hpp:106
const std::string & GetAttackType() const
Definition WsfCyberEngagement.hpp:77
size_t GetAttackerIndex() const
Definition WsfCyberEngagement.hpp:74
Engagement(Engagement &&aSrc)=default
double GetScanDelayTime() const
Definition WsfCyberEngagement.hpp:103
Attack * GetAttack() const
Definition WsfCyberEngagement.hpp:80
double GetAttackDetectionThreshold() const
Definition WsfCyberEngagement.hpp:92
void SetAttackSuccess(bool aSuccess)
Definition WsfCyberEngagement.hpp:142
void SetScanFailureReason(CyberScanFailure aScanFailure)
Definition WsfCyberEngagement.hpp:130
const std::string & GetAttacker() const
Definition WsfCyberEngagement.hpp:73
double GetTimeAttackRecovery() const
Definition WsfCyberEngagement.hpp:96
double GetDuration() const
Definition WsfCyberEngagement.hpp:81
double GetAttackSuccessThreshold() const
Definition WsfCyberEngagement.hpp:83
Engagement(std::string aAttackingPlatform, std::string aVictimPlatform, std::string aNamedAttack, WsfSimulation &aSimulation, size_t aKey)
No default constructor usage - parameters required for instantiation.
Definition WsfCyberEngagement.cpp:35
double GetImmunityDraw() const
Definition WsfCyberEngagement.hpp:112
const char * GetScriptClassName() const override
Definition WsfCyberEngagement.hpp:69
size_t GetVictimIndex() const
Definition WsfCyberEngagement.hpp:76
double GetAttackStartTime() const
Definition WsfCyberEngagement.hpp:82
WsfSimulation & GetSimulation() const
Definition WsfCyberEngagement.hpp:184
double GetTimeAttackDiscovered() const
Definition WsfCyberEngagement.hpp:91
bool GetAttackSuccess() const
Definition WsfCyberEngagement.hpp:107
double GetAttackAttributionDraw() const
Definition WsfCyberEngagement.hpp:95
double GetAttackDetectionDelayTime() const
Definition WsfCyberEngagement.hpp:109
CyberAttackFailure GetAttackFailureReason() const
Definition WsfCyberEngagement.hpp:121
double GetAttackDraw() const
Definition WsfCyberEngagement.hpp:84
const Engagement & operator=(const Engagement &aRhs)=delete
bool GetScanSuccess() const
Definition WsfCyberEngagement.hpp:105
Protect * GetUsedProtection()
Definition WsfCyberEngagement.hpp:116
CyberScanFailure GetScanFailureReason() const
Definition WsfCyberEngagement.hpp:122
CyberScanFailure
Definition WsfCyberEngagement.hpp:49
@ cSCAN_NOT_VULNERABLE
Definition WsfCyberEngagement.hpp:52
@ cSCAN_NONE
Definition WsfCyberEngagement.hpp:53
@ cSCAN_DETECTED
Definition WsfCyberEngagement.hpp:51
@ cSCAN_IMMUNITY
Definition WsfCyberEngagement.hpp:50
CyberAttackFailure
Definition WsfCyberEngagement.hpp:40
@ cATTACK_IMMUNITY
Definition WsfCyberEngagement.hpp:42
@ cATTACK_RANDOM_DRAW
Definition WsfCyberEngagement.hpp:41
@ cATTACK_INSUFFICIENT_RESOURCES
Definition WsfCyberEngagement.hpp:44
@ cATTACK_NONE
Definition WsfCyberEngagement.hpp:45
@ cATTACK_NOT_VULNERABLE
Definition WsfCyberEngagement.hpp:43
Engagement(const Engagement &aSrc)=delete
const std::string & GetVictim() const
Definition WsfCyberEngagement.hpp:75
double GetDeliveryDelayTime() const
Definition WsfCyberEngagement.hpp:104
double GetStatusReportThreshold() const
Definition WsfCyberEngagement.hpp:85
bool GetRecovery() const
Definition WsfCyberEngagement.hpp:97
double GetAttackDetectionDraw() const
Definition WsfCyberEngagement.hpp:93
void SetScanSuccess(bool aSuccess)
Definition WsfCyberEngagement.hpp:140
double GetImmunityThreshold() const
Definition WsfCyberEngagement.hpp:111
const std::vector< std::string > & GetAttackEffects() const
Definition WsfCyberEngagement.hpp:108
double GetScanAttributionThreshold() const
Definition WsfCyberEngagement.hpp:101
double GetScanStartTime() const
Definition WsfCyberEngagement.hpp:98
double GetScanDetectionDraw() const
Definition WsfCyberEngagement.hpp:100
double GetAttackRecoveryDelayTime() const
Definition WsfCyberEngagement.hpp:110
double GetScanAttributionDraw() const
Definition WsfCyberEngagement.hpp:102
Definition WsfCyberProtect.hpp:40
UT_DECLARE_SCRIPT_METHOD(ScanInProgress)
UT_DECLARE_SCRIPT_METHOD(TimeScanInitiated)
Accessor methods for scan status.
UT_DECLARE_SCRIPT_METHOD(ScanDetectionDraw)
UT_DECLARE_SCRIPT_METHOD(AttackType)
UT_DECLARE_SCRIPT_METHOD(AttackDetectionDraw)
UT_DECLARE_SCRIPT_METHOD(AttackSuccessDraw)
UT_DECLARE_SCRIPT_METHOD(AttackerPlatform)
UT_DECLARE_SCRIPT_METHOD(AttackInProgress)
UT_DECLARE_SCRIPT_METHOD(ScanDelayTime)
UT_DECLARE_SCRIPT_METHOD(TimeAttackInitiated)
Accessor methods for attack status.
UT_DECLARE_SCRIPT_METHOD(StatusReportThreshold)
UT_DECLARE_SCRIPT_METHOD(ScanAttributionDraw)
UT_DECLARE_SCRIPT_METHOD(ScanAttributionThreshold)
UT_DECLARE_SCRIPT_METHOD(Attacker)
Accessor methods for general (sim) data.
UT_DECLARE_SCRIPT_METHOD(AttackAttributionDraw)
UT_DECLARE_SCRIPT_METHOD(AttackDetectionThreshold)
UT_DECLARE_SCRIPT_METHOD(AttackFailureReason)
UT_DECLARE_SCRIPT_METHOD(TimeAttackDiscovered)
UT_DECLARE_SCRIPT_METHOD(AttackSuccess)
UT_DECLARE_SCRIPT_METHOD(ScanFailureReason)
UT_DECLARE_SCRIPT_METHOD(ScanDetectionThreshold)
UT_DECLARE_SCRIPT_METHOD(AttackDeliveryDelayTime)
UT_DECLARE_SCRIPT_METHOD(AttackSuccessThreshold)
UT_DECLARE_SCRIPT_METHOD(ScanSuccess)
UT_DECLARE_SCRIPT_METHOD(StatusReportDraw)
UT_DECLARE_SCRIPT_METHOD(AttackAttributionThreshold)
UT_DECLARE_SCRIPT_METHOD(AttackDetectionDelayTime)
UT_DECLARE_SCRIPT_METHOD(AttackRecoveryDelayTime)
UT_DECLARE_SCRIPT_METHOD(TimeAttackRecovery)
UT_DECLARE_SCRIPT_METHOD(VictimPlatform)
ScriptEngagement(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfCyberEngagement.cpp:407
ProbabilityType
Enumerated probability types that can be drawn for in Cyber.
Definition WsfCyberRandom.hpp:29
Definition WsfCyberApplicationExtension.cpp:24
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved