@@ -472,7 +472,7 @@ static struct mud_path *
472
472
mud_get_path (struct mud * mud ,
473
473
union mud_sockaddr * local ,
474
474
union mud_sockaddr * remote ,
475
- int create )
475
+ enum mud_state state )
476
476
{
477
477
if (local -> sa .sa_family != remote -> sa .sa_family ) {
478
478
errno = EINVAL ;
@@ -491,7 +491,7 @@ mud_get_path(struct mud *mud,
491
491
492
492
return path ;
493
493
}
494
- if (! create ) {
494
+ if (state <= MUD_DOWN ) {
495
495
errno = 0 ;
496
496
return NULL ;
497
497
}
@@ -523,12 +523,11 @@ mud_get_path(struct mud *mud,
523
523
524
524
path -> conf .local = * local ;
525
525
path -> conf .remote = * remote ;
526
- path -> conf .state = MUD_UP ;
526
+ path -> conf .state = state ;
527
527
path -> conf .beat = 100 * MUD_ONE_MSEC ;
528
528
path -> conf .fixed_rate = 1 ;
529
529
path -> conf .loss_limit = 255 ;
530
530
path -> status = MUD_PROBING ;
531
- path -> passive = create >> 1 ;
532
531
path -> idle = mud_now (mud );
533
532
534
533
return path ;
@@ -1048,7 +1047,7 @@ mud_recv_msg(struct mud *mud, struct mud_path *path,
1048
1047
path -> rx .loss = (uint64_t )msg -> loss ;
1049
1048
path -> msg .sent = 0 ;
1050
1049
1051
- if (path -> passive )
1050
+ if (path -> conf . state == MUD_PASSIVE )
1052
1051
return ;
1053
1052
1054
1053
mud_update_mtu (path , size );
@@ -1081,7 +1080,7 @@ mud_recv_msg(struct mud *mud, struct mud_path *path,
1081
1080
mud -> err .keyx .count ++ ;
1082
1081
return ;
1083
1082
}
1084
- } else if (! path -> passive ) {
1083
+ } else if (path -> conf . state == MUD_UP ) {
1085
1084
mud -> keyx .use_next = 1 ;
1086
1085
}
1087
1086
mud_send_msg (mud , path , now , sent_time ,
@@ -1142,7 +1141,7 @@ mud_recv(struct mud *mud, void *data, size_t size)
1142
1141
if (mud_localaddr (& local , & msg ))
1143
1142
return 0 ;
1144
1143
1145
- struct mud_path * path = mud_get_path (mud , & local , & remote , 3 );
1144
+ struct mud_path * path = mud_get_path (mud , & local , & remote , MUD_PASSIVE );
1146
1145
1147
1146
if (!path || path -> conf .state <= MUD_DOWN )
1148
1147
return 0 ;
@@ -1164,19 +1163,20 @@ mud_recv(struct mud *mud, void *data, size_t size)
1164
1163
static int
1165
1164
mud_path_update (struct mud * mud , struct mud_path * path , uint64_t now )
1166
1165
{
1167
- if (path -> conf .state < MUD_DOWN )
1168
- return 0 ;
1169
-
1170
- if (path -> conf .state == MUD_DOWN || path -> passive ) {
1171
- if (mud_timeout (now , path -> rx .time , 5 * MUD_ONE_MIN )) {
1172
- memset (path , 0 , sizeof (struct mud_path ));
1173
- return 0 ;
1174
- }
1166
+ switch (path -> conf .state ) {
1167
+ case MUD_DOWN :
1168
+ path -> status = MUD_DELETING ;
1169
+ case MUD_PASSIVE :
1170
+ if (mud_timeout (now , path -> rx .time , 5 * MUD_ONE_MIN )) {
1171
+ memset (path , 0 , sizeof (struct mud_path ));
1172
+ return 0 ;
1173
+ }
1174
+ case MUD_UP : break ;
1175
+ default : return 0 ;
1175
1176
}
1176
- if (path -> conf .state == MUD_DOWN ) {
1177
- path -> status = MUD_DELETING ;
1177
+ if (path -> conf .state == MUD_DOWN )
1178
1178
return 0 ;
1179
- }
1179
+
1180
1180
if (path -> msg .sent >= MUD_MSG_SENT_MAX ) {
1181
1181
if (path -> mtu .probe ) {
1182
1182
mud_update_mtu (path , 0 );
@@ -1196,7 +1196,7 @@ mud_path_update(struct mud *mud, struct mud_path *path, uint64_t now)
1196
1196
path -> status = MUD_LOSSY ;
1197
1197
return 0 ;
1198
1198
}
1199
- if (path -> passive &&
1199
+ if (path -> conf . state == MUD_PASSIVE &&
1200
1200
mud_timeout (mud -> last_recv_time , path -> rx .time ,
1201
1201
MUD_MSG_SENT_MAX * path -> conf .beat )) {
1202
1202
path -> status = MUD_WAITING ;
@@ -1214,7 +1214,7 @@ mud_path_update(struct mud *mud, struct mud_path *path, uint64_t now)
1214
1214
static uint64_t
1215
1215
mud_path_track (struct mud * mud , struct mud_path * path , uint64_t now )
1216
1216
{
1217
- if (path -> passive )
1217
+ if (path -> conf . state != MUD_UP )
1218
1218
return now ;
1219
1219
1220
1220
uint64_t timeout = path -> conf .beat ;
@@ -1319,8 +1319,9 @@ mud_set_path(struct mud *mud, struct mud_path_conf *conf)
1319
1319
errno = EINVAL ;
1320
1320
return -1 ;
1321
1321
}
1322
- struct mud_path * path = mud_get_path (mud , & conf -> local , & conf -> remote ,
1323
- conf -> state > MUD_DOWN );
1322
+ struct mud_path * path = mud_get_path (mud , & conf -> local ,
1323
+ & conf -> remote ,
1324
+ conf -> state );
1324
1325
if (!path )
1325
1326
return -1 ;
1326
1327
0 commit comments