The total sine table has a length of wave_table_len, which means that the original sine that is saved in that table has a period of wave_table_len samples.
Now, taking every single one of these samples, step=1, means that the resulting sine has a period of wave_table_len, too.
Now, we know that a single sample has a duration of 1.0/f_sample; thus, the generated sine has the real-world time period of wave_table_len/f_sample; it's frequency is the inverse, f_sample/wave_table_len.