@startuml

Title Append vendor requested options algorithm (Kea 1.8.0)

:get vendor id from query vivso option;
:get vendor id from response vivso option;
if (vendor id) then (no)
  :return;
  stop
else (yes)
endif

:get configured option list;

:get option request list (ORO) from query DOCSIS vendor option;

while (for each item from configured option list)
  :get configured options in vendor id space;
  while (for each persistent option)
    :push back option code to ORO;
  endwhile
endwhile

if (response vivso option) then (no)
  :create vivso option for vendor id;
else (yes)
endif

:added = false;
while (for each code in ORO)
  if (sub-option is not set in vivso option) then (yes)
    while (for each item from configured option list)
      :get configured options in vendor id space;
      if (found) then (first)
        :add sub-option to vivso option;
        :added = true;
      else (not found or already found)
      endif
    endwhile
  else (no)
  endif
  if (added) then (yes)
    if (vivso option in response) then (no)
      :add vivso option in response;
    else (yes)
    endif
  else (no)
  endif
endwhile
->done;
stop

@enduml
