Generate masks for a set of numbers
- Implements Quine–McCluskey algorithm and Petrick's method
- Gives optimal solution but the algorithm itself is slow
- A simple & recurisve greedy algorithm which aggressively try to generate a new mask by combining two numbers whenever possible
- Very fast but sometimes give non-optimal solution
- Maximum number of variables supported: 32
- Accept don't care terms
Suppose we want to calculate the port mask when filtering Stream UDP ports ranging from [27000, 27015]
Run the program as follow:
$ ./mask_calc 27000-27015
The program then output the results, first pair is value
27000 masked by
0xfffffff8, second pair is value
27008 masked by
value(dec) / mask(hex) 1: 27000 / fffffff8 2: 27008 / fffffff8
Additionaly, you can check the result by another program I wrote, see Notes.
This program is licensed under GPLv3
There is another program Mask Enumerator, which was created at the same time to verify the solution of this program.
This program was created to help me generate the port mask when writing traffic shaping rules. When doing traffic shaping by utilizing u32 filter, the filter could only match multiple ports by specifying a mask.
At the time writing the filtering rules, I couldn't find any suitable tool for this task, so I started my own.