India stood seven wickets away from a series-clinching victory after setting Sri Lanka a formidable 386-run victory target on the penultimate day of the third and final Test.
Resuming on a precarious 21-3 in the bowler-dominated weather-hit contest, the visitors needed a string of cameos from their middle and lower-order batsmen to score 274 in their second-innings.
In their first Test since batting great Kumar Sangakkara retired, Sri Lanka lost opener Upul Tharanga in the first over and were reeling at 67-3 at close.
Opener Kaushal Silva (24) and skipper Angelo Mathews (22) were at the crease with the hosts still needing 319 runs for an improbable victory.
Having taken a 111-run first-innings lead, India consolidated their position in the first two sessions at the Sinhalese Sports Club to virtually bat Sri Lanka out of the contest.
Sri Lanka wobbled early in their chase with Ishant Sharma dismissing Tharanga before Umesh Yadav sent back Dimuth Karunaratne -- both caught by wicketkeeper Naman Ojha for nought.
Ishant, who had an animated altercation with Prasad earlier in the day, also dismissed Dinesh Chandimal before giving the batsman a send-off, an act that earned him a 65 percent match fee fine in the first Test.
India 312 all out & 274 all out (Ashwin 58, Pradeep 4-62)
Sri Lanka 201 all out & 67-3 (Silva 24*, Sharma 2-14)