ITS
ParameterConfiguration.cpp
Go to the documentation of this file.
2 
4 {
5  read();
6 
8  {
10  {
11  QString randomHex;
12  for(int i = 0; i < 12; i++)
13  {
14  int n = qrand() % 16;
15  randomHex.append(QString::number(n,16));
16 
17  if(i%2)
18  randomHex.append(":");
19  }
20  int last = -1;
21  sscanf(randomHex.toStdString().c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx%n",
22  m_mid + 0, m_mid + 1, m_mid + 2, m_mid + 3, m_mid + 4, m_mid + 5, &last);
23 
24  m_mid[0] &= 0xFC;
25  m_mid[0] |= 0x02;
26 
27  break;
28  }
31  default:
32  getMacAddr();
33  break;
34  }
35  //readDebug();
36 }
37 
39 {/*
40  if(m_energyStorageType.buf != 0)
41  free(m_energyStorageType.buf);
42  if(m_positionOfPillars.list.array != 0)
43  {
44  for(int i = 0; i< m_positionOfPillars.list.count; i++)
45  free(m_positionOfPillars.list.array[i]);
46  free(m_positionOfPillars.list.array);
47  }*/
48 }
49 
51 {
53  foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
54  {
55  // Return only the first non-loopback MAC Address
56  if (!(netInterface.flags() & QNetworkInterface::IsLoopBack))
57  {
58  int last = -1;
59  int rc = sscanf(netInterface.hardwareAddress().toStdString().c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx%n",
60  m_mid + 0, m_mid + 1, m_mid + 2, m_mid + 3, m_mid + 4, m_mid + 5, &last);
61  if(rc != 6 || netInterface.hardwareAddress().toStdString().size() > (unsigned int)last)
62  fprintf(stderr, "invalid mac address format %s", netInterface.hardwareAddress().toStdString().c_str());
63  printf("hardwareaddress : %s\n",netInterface.hardwareAddress().toStdString().c_str());
64  }
65  }
66 }
67 
69 {
70  for(int i = 0; i < 6; i++)
71  m_mid[i] = mid[i];
72 }
73 
75 {
76  cfg_opt_t vehicleLength_opts[] =
77  {
78  CFG_INT("vehicleLengthConfidence", VehicleLengthConfidenceIndication_unavailable, CFGF_NONE),
79  CFG_INT("vehicleLengthValue", VehicleLengthValue_unavailable, CFGF_NONE),
80  CFG_END()
81  };
82  cfg_opt_t trafficClass_opts[] =
83  {
84  CFG_INT("storeCarryForward", 0, CFGF_NONE),
85  CFG_INT("channelOffload", 0, CFGF_NONE),
86  CFG_INT("trafficClassID", TrafficClass::trafficClassID_otherDataTraffic, CFGF_NONE),
87  CFG_END()
88  };
89 
90  cfg_opt_t opts[] =
91  {
92  CFG_STR("interface", "eth0", CFGF_NONE),
93  CFG_INT("countryCode", 208, CFGF_NONE),
94  CFG_BOOL("itsGnGeoAreaLineForwarding", cfg_true, CFGF_NONE),
95  CFG_INT("itsGnGeoBroadcastForwardingAlgorithm", itsGnGeoBroadcastForwardingAlgorithm_advanced, CFGF_NONE),
96  CFG_INT("itsGnGeoUnicastForwardingAlgorithm", itsGnGeoUnicastForwardingAlgorithm_greedy, CFGF_NONE),
97  CFG_INT("itsGnLocalAddrConfMethod", itsGnLocalAddrConfMethod_default, CFGF_NONE),
98  CFG_BOOL("itsGnSecurity", cfg_false, CFGF_NONE),
99 
100  CFG_BOOL_LIST("energyStorageType", "{false, false, false, false, false, false, false}", CFGF_NONE),
101  CFG_INT("heightLonCarrLeft", HeightLonCarr_unavailable, CFGF_NONE),
102  CFG_INT("heightLonCarrRight", HeightLonCarr_unavailable, CFGF_NONE),
103  CFG_INT("posCentMass", PosCentMass_unavailable, CFGF_NONE),
104  CFG_INT("posFrontAx", PosFrontAx_unavailable, CFGF_NONE),
105 
106  CFG_INT_LIST("positionOfPillars", "{30}", CFGF_NONE),
107 
108  CFG_INT("posLonCarrLeft", PosLonCarr_unavailable, CFGF_NONE),
109  CFG_INT("posLonCarrRight", PosLonCarr_unavailable, CFGF_NONE),
110  CFG_SEC("trafficClass",trafficClass_opts, CFGF_NO_TITLE_DUPES),
111  CFG_INT("turningRadius", TurningRadius_unavailable, CFGF_NONE),
112  CFG_SEC("vehicleLength", vehicleLength_opts, CFGF_NO_TITLE_DUPES),
113  CFG_INT("vehicleMass", VehicleMass_unavailable, CFGF_NONE),
114  CFG_INT("vehicleWidth", VehicleWidth_unavailable, CFGF_NONE),
115  CFG_INT("wheelBaseVehicle", WheelBaseVehicle_unavailable, CFGF_NONE),
116 
117  CFG_INT("maxRepetitionAdvancedContention", 3, CFGF_NONE),
118 
119  CFG_END()
120  };
121 
122  m_posPillar = (PosPillar_t**)calloc(3, sizeof *m_posPillar);
123  for(int i = 0 ; i < 3 ; i++)
124  m_posPillar[i] = (PosPillar_t*)calloc(1, sizeof *m_posPillar[i]);
125  cfg_t *cfg;
126  cfg_t *cfg_vehicleLength;
127  cfg_t *cfg_trafficClass;
128 
129  cfg = cfg_init(opts, CFGF_NONE);
130 
131  cfg_vehicleLength = cfg_getsec(cfg, "vehicleLength");
132  cfg_trafficClass = cfg_getsec(cfg, "trafficClass");
133 
134  cfg_set_validate_func(cfg, "countryCode", validate_unsigned_int);
135  cfg_set_validate_func(cfg, "itsGnGeoBroadcastForwardingAlgorithm", validate_unsigned_int);
136  cfg_set_validate_func(cfg, "itsGnGeoUnicastForwardingAlgorithm", validate_unsigned_int);
137  cfg_set_validate_func(cfg, "itsGnLocalAddrConfMethod", validate_unsigned_int);
138  cfg_set_validate_func(cfg, "heightLonCarrLeft", validate_unsigned_int);
139  cfg_set_validate_func(cfg, "heightLonCarrRight", validate_unsigned_int);
140  cfg_set_validate_func(cfg, "posCentMass", validate_unsigned_int);
141  cfg_set_validate_func(cfg, "posFrontAx", validate_unsigned_int);
142  cfg_set_validate_func(cfg, "positionOfPillars", validate_unsigned_int);
143  cfg_set_validate_func(cfg, "posLonCarrLeft", validate_unsigned_int);
144  cfg_set_validate_func(cfg, "posLonCarrRight", validate_unsigned_int);
145  cfg_set_validate_func(cfg_trafficClass, "storeCarryForward", validate_unsigned_int);
146  cfg_set_validate_func(cfg_trafficClass, "channelOffload", validate_unsigned_int);
147  cfg_set_validate_func(cfg_trafficClass, "trafficClassID", validate_unsigned_int);
148  cfg_set_validate_func(cfg, "turningRadius", validate_unsigned_int);
149  cfg_set_validate_func(cfg_vehicleLength, "vehicleLengthConfidence", validate_unsigned_int);
150  cfg_set_validate_func(cfg_vehicleLength, "vehicleLengthValue", validate_unsigned_int);
151  cfg_set_validate_func(cfg, "vehicleMass", validate_unsigned_int);
152  cfg_set_validate_func(cfg, "vehicleWidth", validate_unsigned_int);
153  cfg_set_validate_func(cfg, "wheelBaseVehicle", validate_unsigned_int);
154 
155  cfg_set_validate_func(cfg, "maxRepetitionAdvancedContention", validate_unsigned_int);
156 
157  cfg_add_searchpath(cfg, "/etc/its/config");
158  if(cfg_parse(cfg, "system.conf") == CFG_PARSE_ERROR)
159  printf("PARSE_ERROR\n");
160 
161  m_interface = cfg_getstr(cfg, "interface");
162  m_countryCode = cfg_getint(cfg, "countryCode");
163  m_itsGnGeoAreaLineForwarding = cfg_getbool(cfg, "itsGnGeoAreaLineForwarding");
164  m_itsGnGeoBroadcastForwardingAlgorithm = cfg_getint(cfg, "itsGnGeoBroadcastForwardingAlgorithm");
165  m_itsGnGeoUnicastForwardingAlgorithm = cfg_getint(cfg, "itsGnGeoUnicastForwardingAlgorithm");
166  m_itsGnLocalAddrConfMethod = cfg_getint(cfg, "itsGnLocalAddrConfMethod");
167  m_itsGnSecurity = cfg_getbool(cfg, "itsGnSecurity");
168 
169  m_energyStorageType = makeBitString(cfg_size(cfg, "energyStorageType") ,cfg, "energyStorageType");
170  m_heightLonCarrLeft = cfg_getint(cfg, "heightLonCarrLeft");
171  m_heightLonCarrRight = cfg_getint(cfg, "heightLonCarrRight");
172  m_posCentMass = cfg_getint(cfg, "posCentMass");
173  m_posFrontAx = cfg_getint(cfg, "posFrontAx");
174 
175  memset(&m_positionOfPillars, 0, sizeof m_positionOfPillars);
176  for(uint i=0; i < cfg_size(cfg, "positionOfPillars"); i++)
177  {
178  *m_posPillar[i] = cfg_getnint(cfg, "positionOfPillars", i);
179  }
180  m_positionOfPillars.list.array = (PosPillar_t**) calloc (1, sizeof * m_positionOfPillars.list.array);
181  m_positionOfPillars.list.count = 0;
182  m_positionOfPillars.list.size = 0;
183  m_positionOfPillars.list.free = 0;
184  for(uint i=0; i<cfg_size(cfg, "positionOfPillars"); i++)
185  {
186  m_positionOfPillars.list.array[i] = (PosPillar_t*)calloc(1,sizeof * m_positionOfPillars.list.array[i]);
188  //m_positionOfPillars.list.array[i] = m_posPillar[i];
189  }
191 
192  m_posLonCarrLeft = cfg_getint(cfg, "posLonCarrLeft");
193  m_posLonCarrRight = cfg_getint(cfg, "posLonCarrRight");
194  quint8 SCF_tmp = cfg_getint(cfg_trafficClass, "storeCarryForward");
195  quint8 channelOffload_tmp = cfg_getint(cfg_trafficClass, "channelOffload");
196  quint8 TCID_tmp = cfg_getint(cfg_trafficClass, "trafficClassID");
197  m_trafficClass = TrafficClass(SCF_tmp, channelOffload_tmp, TCID_tmp);
198  m_turningRadius = cfg_getint(cfg, "turningRadius");
199  m_vehicleLength.vehicleLengthConfidenceIndication = cfg_getint(cfg_vehicleLength, "vehicleLengthConfidence");
200  m_vehicleLength.vehicleLengthValue = cfg_getint(cfg_vehicleLength, "vehicleLengthValue");
201  m_vehicleMass = cfg_getint(cfg, "vehicleMass");
202  m_vehicleWidth = cfg_getint(cfg, "vehicleWidth");
203  m_wheelBaseVehicle = cfg_getint(cfg, "wheelBaseVehicle");
204 
205  m_maxRepetitionAdvancedContention = cfg_getint(cfg, "maxRepetitionAdvancedContention");
206 
207  cfg_free(cfg);
208 
209  //readDebug();
210 }
211 
213 {
214  printf("-----------------------------------------------------------------\n\t\tReadConf\n\n");
215  printf("mac addr : ");
216  int h;
217  for(h=0; h<5; h++)
218  printf("%02x:",m_mid[h]);
219  printf("%02x",m_mid[h]);
220  printf("\n\n");
221  printf("interface = %s\n\n", m_interface.toStdString().c_str());
222  printf("countryCode = %ld\n\n", m_countryCode);
223  printf("itsGnGeoAreaLineForwarding = %d\n\n", m_itsGnGeoAreaLineForwarding);
224  printf("itsGnGeoBroadcastForwardingAlgorithm = %d\n\n", m_itsGnGeoBroadcastForwardingAlgorithm);
225  printf("itsGnGeoUnicastForwardingAlgorithm = %d\n\n", m_itsGnGeoUnicastForwardingAlgorithm);
226  printf("itsGnLocalAddrConfMethod = %d\n\n", m_itsGnLocalAddrConfMethod);
227  printf("itsGnSecurity = %d\n\n", m_itsGnSecurity);
228 
229  printf("energyStorageType = %s\n\n", printBitString(m_energyStorageType).toStdString().c_str());
230  printf("heightLonCarrLeft = %ld\n\n", m_heightLonCarrLeft);
231  printf("heightLonCarrRight = %ld\n\n", m_heightLonCarrRight);
232  printf("posCentMass = %ld\n\n", m_posCentMass);
233  printf("posFrontAx = %ld\n\n", m_posFrontAx);
234 
235  printf("positionOfPillars : {");
236  int i;
237  for(i = 0; i < m_positionOfPillars.list.count-1; i++)
238  printf("%ld, ", *m_positionOfPillars.list.array[i]);
239  printf("%ld}\n\n", *m_positionOfPillars.list.array[i]);
240 
241  printf("posLonCarrLeft = %ld\n\n", m_posLonCarrLeft);
242  printf("posLonCarrRight = %ld\n\n", m_posLonCarrRight);
243  printf("trafficClass\n{\n\tstoreCarryForward = %d\n\n\tchannelOffload = %d\n\n\ttrafficClassID = %d\n}\n\n", m_trafficClass.SCF() ,m_trafficClass.channelOffload(), m_trafficClass.TCID());
244  printf("turningRadius = %ld\n\n", m_turningRadius);
245  printf("vehicleLength\n{\n\tvehicleLengthConfidence = %ld\n\n\tvehicleLengthValue = %ld\n}\n\n", m_vehicleLength.vehicleLengthConfidenceIndication, m_vehicleLength.vehicleLengthValue);
246  printf("vehicleMass = %ld\n\n", m_vehicleMass);
247  printf("vehicleWidth = %ld\n\n", m_vehicleWidth);
248  printf("wheelBaseVehicle = %ld\n\n", m_wheelBaseVehicle);
249 
250  printf("maxRepetitionAdvancedContention = %d\n\n", m_maxRepetitionAdvancedContention);
251 }
252 
254 {
255  if(i<m_positionOfPillars.list.count)
256  return *m_positionOfPillars.list.array[i];
257  else
258  return PosPillar_unavailable;
259 }
260 
262 {
263  memcpy(this->m_mid, other.m_mid, 6);
264  this->m_interface = other.m_interface;
265  this->m_countryCode = other.m_countryCode;
270  this->m_itsGnSecurity = other.m_itsGnSecurity;
271 
275  this->m_posCentMass = other.m_posCentMass;
276  this->m_posFrontAx = other.m_posFrontAx;
277  memcpy(this->m_posPillar, other.m_posPillar, 3);
279  this->m_posLonCarrLeft = other.m_posLonCarrLeft;
280  this->m_posLonCarrRight = other.m_posLonCarrRight;
281  this->m_trafficClass = other.m_trafficClass;
282  this->m_turningRadius = other.m_turningRadius;
283  this->m_vehicleLength = other.m_vehicleLength;
284  this->m_vehicleMass = other.m_vehicleMass;
285  this->m_vehicleWidth = other.m_vehicleWidth;
287  return *this;
288 }
#define ASN_SEQUENCE_ADD(headptr, ptr)
ParameterConfiguration & operator=(const ParameterConfiguration &other)
operator= ParameterConfiguration affectation operator.
bool itsGnGeoAreaLineForwarding() const
itsGnGeoAreaLineForwarding Is the GN geo area line forwarding used?
int validate_unsigned_int(cfg_t *cfg, cfg_opt_t *opt)
validate_unsigned_int Check if an option is an unsigned int
Definition: api.cpp:186
quint8 channelOffload() const
channelOffload Channel offload field getter.
Definition: TrafficClass.h:83
asn_TYPE_descriptor_t asn_DEF_PositionOfPillars
Global configuration initializer.
quint8 TCID() const
TCID Traffic class ID field getter.
Definition: TrafficClass.h:88
EnergyStorageType_t m_energyStorageType
PositionOfPillars_t positionOfPillars() const
positionOfPillars Position of the pillars getter.
#define itsGnLocalAddrConfMethod_managed
Definition: constantes.h:68
void getMacAddr()
getMacAddr Get MacAddr if itsGnLocalAddrConfMethod = 1 to create GnAddr
uchar * mid()
mid MID getter.
void read()
read Configuration file reading.
HeightLonCarr_t m_heightLonCarrRight
QString printBitString(BIT_STRING_t b)
printBitString Print a BIT_STRING into a QString.
Definition: api.cpp:175
#define itsGnLocalAddrConfMethod_auto
Definition: constantes.h:67
VehicleLengthValue_t vehicleLengthValue
Definition: VehicleLength.h:24
HeightLonCarr_t m_heightLonCarrLeft
long PosPillar_t
Definition: PosPillar.h:27
void updateMID(uchar *mid)
updateMacAddr Get GnAddr from security layer if itsGnLocalGnAddrConfMethod = 2 or if DAD is invoked ...
void readDebug()
readDebug Configuration printing.
BIT_STRING_t makeBitString(int nbits, cfg_t *cfg, const char *opt_name)
makeBitString Generate a BIT_STRING from configuration.
Definition: api.cpp:198
ParameterConfiguration()
ParameterConfiguration Default constructor.
VehicleLengthConfidenceIndication_t vehicleLengthConfidenceIndication
Definition: VehicleLength.h:25
WheelBaseVehicle_t m_wheelBaseVehicle
PositionOfPillars_t m_positionOfPillars
~ParameterConfiguration()
~ParameterConfiguration ParameterConfiguration destructor.
quint8 SCF() const
SCF Store-carry-forward field getter.
Definition: TrafficClass.h:78
int asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr)
Definition: constr_TYPE.c:36
#define itsGnLocalAddrConfMethod_anonymous
Definition: constantes.h:69
#define itsGnLocalAddrConfMethod_default
Definition: constantes.h:65