The service only accepts protocol numbers, not names.  Instead of using a `choices` list, try accepting anything and translating strings to protocol numbers where possible in `preprocess()`.  `socket.getprotobyname` might be useful, but since the command also has to handle the "all" special case I will leave the decision of what logic makes the most sense up to you.