84
84
};
85
85
86
86
static int in_hand_shake ;
87
+ static int debug ;
87
88
88
89
static char * os_name = "" ;
89
90
static char * os_major = "" ;
@@ -184,6 +185,20 @@ static void kvp_update_file(int pool)
184
185
kvp_release_lock (pool );
185
186
}
186
187
188
+ static void kvp_dump_initial_pools (int pool )
189
+ {
190
+ int i ;
191
+
192
+ syslog (LOG_DEBUG , "===Start dumping the contents of pool %d ===\n" ,
193
+ pool );
194
+
195
+ for (i = 0 ; i < kvp_file_info [pool ].num_records ; i ++ )
196
+ syslog (LOG_DEBUG , "pool: %d, %d/%d key=%s val=%s\n" ,
197
+ pool , i + 1 , kvp_file_info [pool ].num_records ,
198
+ kvp_file_info [pool ].records [i ].key ,
199
+ kvp_file_info [pool ].records [i ].value );
200
+ }
201
+
187
202
static void kvp_update_mem_state (int pool )
188
203
{
189
204
FILE * filep ;
@@ -271,6 +286,8 @@ static int kvp_file_init(void)
271
286
return 1 ;
272
287
kvp_file_info [i ].num_records = 0 ;
273
288
kvp_update_mem_state (i );
289
+ if (debug )
290
+ kvp_dump_initial_pools (i );
274
291
}
275
292
276
293
return 0 ;
@@ -298,6 +315,9 @@ static int kvp_key_delete(int pool, const __u8 *key, int key_size)
298
315
* Found a match; just move the remaining
299
316
* entries up.
300
317
*/
318
+ if (debug )
319
+ syslog (LOG_DEBUG , "%s: deleting the KVP: pool=%d key=%s val=%s" ,
320
+ __func__ , pool , record [i ].key , record [i ].value );
301
321
if (i == (num_records - 1 )) {
302
322
kvp_file_info [pool ].num_records -- ;
303
323
kvp_update_file (pool );
@@ -316,20 +336,36 @@ static int kvp_key_delete(int pool, const __u8 *key, int key_size)
316
336
kvp_update_file (pool );
317
337
return 0 ;
318
338
}
339
+
340
+ if (debug )
341
+ syslog (LOG_DEBUG , "%s: could not delete KVP: pool=%d key=%s. Record not found" ,
342
+ __func__ , pool , key );
343
+
319
344
return 1 ;
320
345
}
321
346
322
347
static int kvp_key_add_or_modify (int pool , const __u8 * key , int key_size ,
323
348
const __u8 * value , int value_size )
324
349
{
325
- int i ;
326
- int num_records ;
327
350
struct kvp_record * record ;
351
+ int num_records ;
328
352
int num_blocks ;
353
+ int i ;
354
+
355
+ if (debug )
356
+ syslog (LOG_DEBUG , "%s: got a KVP: pool=%d key=%s val=%s" ,
357
+ __func__ , pool , key , value );
329
358
330
359
if ((key_size > HV_KVP_EXCHANGE_MAX_KEY_SIZE ) ||
331
- (value_size > HV_KVP_EXCHANGE_MAX_VALUE_SIZE ))
360
+ (value_size > HV_KVP_EXCHANGE_MAX_VALUE_SIZE )) {
361
+ syslog (LOG_ERR , "%s: Too long key or value: key=%s, val=%s" ,
362
+ __func__ , key , value );
363
+
364
+ if (debug )
365
+ syslog (LOG_DEBUG , "%s: Too long key or value: pool=%d, key=%s, val=%s" ,
366
+ __func__ , pool , key , value );
332
367
return 1 ;
368
+ }
333
369
334
370
/*
335
371
* First update the in-memory state.
@@ -349,6 +385,9 @@ static int kvp_key_add_or_modify(int pool, const __u8 *key, int key_size,
349
385
*/
350
386
memcpy (record [i ].value , value , value_size );
351
387
kvp_update_file (pool );
388
+ if (debug )
389
+ syslog (LOG_DEBUG , "%s: updated: pool=%d key=%s val=%s" ,
390
+ __func__ , pool , key , value );
352
391
return 0 ;
353
392
}
354
393
@@ -360,15 +399,22 @@ static int kvp_key_add_or_modify(int pool, const __u8 *key, int key_size,
360
399
record = realloc (record , sizeof (struct kvp_record ) *
361
400
ENTRIES_PER_BLOCK * (num_blocks + 1 ));
362
401
363
- if (record == NULL )
402
+ if (!record ) {
403
+ syslog (LOG_ERR , "%s: Memory alloc failure" , __func__ );
364
404
return 1 ;
405
+ }
365
406
kvp_file_info [pool ].num_blocks ++ ;
366
407
367
408
}
368
409
memcpy (record [i ].value , value , value_size );
369
410
memcpy (record [i ].key , key , key_size );
370
411
kvp_file_info [pool ].records = record ;
371
412
kvp_file_info [pool ].num_records ++ ;
413
+
414
+ if (debug )
415
+ syslog (LOG_DEBUG , "%s: added: pool=%d key=%s val=%s" ,
416
+ __func__ , pool , key , value );
417
+
372
418
kvp_update_file (pool );
373
419
return 0 ;
374
420
}
@@ -1722,6 +1768,7 @@ void print_usage(char *argv[])
1722
1768
fprintf (stderr , "Usage: %s [options]\n"
1723
1769
"Options are:\n"
1724
1770
" -n, --no-daemon stay in foreground, don't daemonize\n"
1771
+ " -d, --debug Enable debug logs(syslog debug by default)\n"
1725
1772
" -h, --help print this help\n" , argv [0 ]);
1726
1773
}
1727
1774
@@ -1743,10 +1790,11 @@ int main(int argc, char *argv[])
1743
1790
static struct option long_options [] = {
1744
1791
{"help" , no_argument , 0 , 'h' },
1745
1792
{"no-daemon" , no_argument , 0 , 'n' },
1793
+ {"debug" , no_argument , 0 , 'd' },
1746
1794
{0 , 0 , 0 , 0 }
1747
1795
};
1748
1796
1749
- while ((opt = getopt_long (argc , argv , "hn " , long_options ,
1797
+ while ((opt = getopt_long (argc , argv , "hnd " , long_options ,
1750
1798
& long_index )) != -1 ) {
1751
1799
switch (opt ) {
1752
1800
case 'n' :
@@ -1755,6 +1803,9 @@ int main(int argc, char *argv[])
1755
1803
case 'h' :
1756
1804
print_usage (argv );
1757
1805
exit (0 );
1806
+ case 'd' :
1807
+ debug = 1 ;
1808
+ break ;
1758
1809
default :
1759
1810
print_usage (argv );
1760
1811
exit (EXIT_FAILURE );
@@ -1777,6 +1828,9 @@ int main(int argc, char *argv[])
1777
1828
*/
1778
1829
kvp_get_domain_name (full_domain_name , sizeof (full_domain_name ));
1779
1830
1831
+ if (debug )
1832
+ syslog (LOG_INFO , "Logging debug info in syslog(debug)" );
1833
+
1780
1834
if (kvp_file_init ()) {
1781
1835
syslog (LOG_ERR , "Failed to initialize the pools" );
1782
1836
exit (EXIT_FAILURE );
0 commit comments