# make_map ```lua kumo.cidr.make_map(MAP) ``` Create a new *CIDR map*, optionally seeded with an initial set of key/value pairs. A CIDR map is a dictionary type that allows resolving the value associated with an IP address key, supporting matches based on CIDR blocks in the mapping. For simple inputs, the mapping behaves as you might expect for a dictionary type: ```lua local cmap = kumo.cidr.make_map() cmap['127.0.0.1'] = 'bar' assert(cmap['127.0.0.1'] == 'bar') assert(cmap['not.set'] == nil) ``` you can define keys based on net blocks using CIDR notation: ```lua local cmap = kumo.cidr.make_map() cmap['10.0.0.0/24'] = '10. block' -- any address in that /24 will return the mapped value assert(cmap['10.0.0.1'] == '10. block') assert(cmap['10.0.0.42'] == '10. block') -- other addresses won't assert(cmap['100.0.0.100'] == nil) ``` You may seed an initial value from a pre-existing lua table: ```lua local cmap = kumo.cidr.make_map { ['127.0.0.0/24'] = 'loopback', ['10.0.0.0/24'] = 'lan', } -- and mutate the table after is has been constructed: cmap['4.2.4.2'] = 4242 ``` Keys to the map are IPv4 or IPv6 addresses, but for convenience, domain literals and IP and port number combinations such as `"127.0.0.1:25"`, `"[127.0.0.1]"` `"[::1]:25"` are understood to facilitate more ergonomic use in policy: ```lua local SOURCE_CLASSIFICATION = kumo.cidr.make_map { ['127.0.0.0/24'] = 'loopback', ['10.0.0.0/24'] = 'lan', } kumo.on('smtp_server_message_received', function(msg) local source_type = SOURCE_CLASSIFICATION[msg:get_meta 'received_from'] end) ```