Ravindra Jadeja picked up three wickets as India bundled out Sri Lanka for 291 shortly after lunch on the third day of the first Test in Galle on Friday.
Sri Lanka are down to 10 men after losing Asela Gunaratne who broke his thumb while fielding on the first day of the game.
India, who made 600 in their first innings, took a 309-run lead after deciding against enforcing a follow-on.
Dilruwan Perera remained unbeaten on 92 and Angelo Mathews made 83 in an otherwise lacklustre first innings display by the hosts.